Java: прочитать файл и разделить строку на отдельные строки - PullRequest
0 голосов
/ 06 августа 2020

Я хочу прочитать файл file.txt, содержащий такие пары слов ...

yaniv:bobo

После прочтения этого файла file.txt я хочу разделить этот текст и поместить каждое слово в переменные и попробуйте сравнить их вот так:

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) );
                }   

НО Я ПОЛУЧАЮ ЭТУ ОШИБКУ ?? ЗАЧЕМ ?? Что не так ??

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)

Ответы [ 3 ]

0 голосов
/ 06 августа 2020

Ваш код выглядит нормально, когда я скомпилировал и запустил его с использованием фиктивного файла. Возможно проблема в вашем файле. предоставьте свой файл для дальнейшей проверки.

Также обратите внимание, что вы сравниваете строки, используя ==. Всегда сравнивайте строки, используя метод equals или equalsIgnoreCase.

например:

if(surname.equals("bobo") {}
0 голосов
/ 06 августа 2020

Проверьте, как заканчивается ваш файл. Scanner достаточно умен, чтобы отбросить единственный перенос строки с конца. Однако, если после этого будет что-то (например, пробел или другой разрыв строки), это будет новая строка для чтения. В таких случаях

String descritpion = scan.nextLine();

будет читать строку empty-i sh, а затем

String []temp = descritpion.split(":");

разбивает ее на одну -item массив, где

String name = temp[0];

содержит всю строку (пустую или содержащую один пробел или что-то еще), вот как он проходит но

String surname = temp[1];

не существует, и поэтому выдает исключение. Однако в таких случаях line должно появиться на экране перед исключением. См. Тест (со строками вместо файлов) здесь: https://ideone.com/ixo0kd - случаи без разрыва строки и одиночный разрыв строки работают нормально, пробел после разрыва строки и двойная линия -break случаев вызывает исключение, но перед этим отображается пустое line.

0 голосов
/ 06 августа 2020

Не знаю, решит ли это вашу проблему, но вместо

if(surname == "bobo") {

Используйте:

if(surname.contains("bobo")) {

surname == «bobo» вернет false, поскольку при сравнении адрес фамилия

...