英文:
Java: Read a File & Split a line into separate string
问题
I understand your request. Here's the translation of the code snippet you provided:
我想要读取一个名为 file.txt 的文件,其中包含类似这样的单词对...
yaniv:bobo
读取了 file.txt 后,我想要分割这段文本,并将每个单词放入变量中,然后尝试进行比较,就像这样:
```java
Scanner scan = new Scanner(new FileReader(file));
while(scan.hasNextLine()) {
String descritpion = scan.nextLine();
System.out.println("line" + descritpion);
String []temp = descritpion.split(":");
String name = temp[0];
String surname = temp[1];
System.out.println("name : " + name);
System.out.println("surname : " + surname);
}
if(surname.equals("bobo")) {
System.out.println("date set from file");
GUI_view.getDateChooser().setDate( new SimpleDateFormat("yyyy-MM-dd").parse(part1) );
}
但是我得到了这个错误?为什么?出了什么问题?
在线程 "AWT-EventQueue-0" 中的异常
java.lang.ArrayIndexOutOfBoundsException: 1
at controller.TaskController.openFile(TaskController.java:213)
at controller.TaskController.lambda$11(TaskController.java:110)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
请注意,这部分代码并不与您提供的原始论文写作程序的框架直接相关。如果您需要进一步的代码实现或指导,请随时提问。
英文:
I want to read a file, file.txt that contains word pairs like this...
yaniv:bobo
After reading this file.txt , I want to split this text and put each words in variables and try to compare them like this :
Scanner scan = new Scanner(new FileReader(file));
while(scan.hasNextLine()) {
String descritpion = scan.nextLine();
System.out.println("line" +descritpion);
String []temp = descritpion.split(":");
String name = temp[0];
String surname = temp[1];
System.out.println("name : "+ name);
System.out.println("surname : "+ surname);
}
if(surname == "bobo") {
System.out.println("date set from file ");
GUI_view.getDateChooser().setDate( new SimpleDateFormat("yyyy-MM-dd").parse(part1) );
}
BUT I GET THIS ERROR ?? WHY ?? WHats Wrong ??
Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException: 1
at controller.TaskController.openFile(TaskController.java:213)
at controller.TaskController.lambda$11(TaskController.java:110)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
答案1
得分: 0
不知道这是否会解决您的问题,但是改用以下方式可能会有帮助:
if(surname.contains("bobo")) {
surname == "bobo"
会返回false,因为它比较的是surname
的地址。
英文:
Don't know if this will fix your problem, but instead of
if(surname == "bobo") {
Use:
if(surname.contains("bobo")) {
surname == "bobo" will return false as its comparing the address of surname
答案2
得分: 0
检查文件的结尾方式。Scanner
足够聪明,可以忽略末尾的单个换行符。但是,如果之后还有任何东西(比如空格或另一个换行符),那将成为要读取的新行。
在这种情况下
> String descritpion = scan.nextLine();
将读取一个近似为空的字符串,然后
> String []temp = descritpion.split(":");
将其拆分成一个包含单个项的数组,其中
> String name = temp[0];
包含整个字符串(可能为空或包含一个空格或其他内容),这就是它成功的原因,
但是
> String surname = temp[1];
不存在,这就是它抛出异常的原因。
然而,在这种情况下,异常之前应该出现一个line
。请参见此处的测试(使用字符串而不是文件):https://ideone.com/ixo0kd - 无换行和单个换行情况正常工作,换行后有空格和双换行情况会引发异常,但在异常之前有一个空的line
显示出来。
英文:
Check how your file ends. Scanner
is clever enough to throw away a single line-break from the end. However if there is anything (like a space or another line break) afterwards, that's going to be a new line to be read.
In such cases
> String descritpion = scan.nextLine();
will read an empty-ish string, then
> String []temp = descritpion.split(":");
splits it into a single-item array, where
> String name = temp[0];
contains the entire string (being empty or containing a single space or something), that's how it passes
but
> String surname = temp[1];
does not exist, and that's why it throws an exception.
However in such cases a line
should appear on screen prior to the exception. See test (with strings instead of files) here: https://ideone.com/ixo0kd - the no-line-break, and single-line-break cases work fine, the space-after-line-break and double-line-break cases throw the exception, but have an empty line
displayed before.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论