2015-11-18 2 views
1

У меня есть простой текстовый файл:Массив IndexOutOfBoundsException на Textfile Parse

John Jobs 225 Louis Lane Road 
Amy Jones 445 Road Street 
Corey Dol 556 The Road 

Где есть люди с первым, фамилии и адрес

Я пытаюсь разобрать их, как это:

public void parseText() { 

     try { 
      File file = new File("test.txt"); 
      String[] splitted; 

      Scanner sc = new Scanner(file); 

      while (sc.hasNextLine()) { 
       String s = sc.nextLine(); 
       splitted = s.split("\\s+"); 
       System.out.println(splitted[0]); 
      } 
      sc.close(); 
     } catch (FileNotFoundException e) { 
      System.out.println("Error");  } 

    } 

раскол [0] отлично работает, в котором печатаются первые имена людей. splitted [1] печатает фамилии, но дает мне IndexOutOfBoundsException. spitted [2] печатает первые целые значения каждого адреса, но снова дает мне исключение.

Так Тогда я попытался сделать это:

String[] splitted = new String[4]; 

и еще раз попробовал доступ к любому индексу больше 0, но все-таки получили эту проблему. Что я делаю неправильно?

+0

вы пробовали отладки? Распечатайте 'String s' перед' split', чтобы увидеть, что он на самом деле получает. Затем попробуйте распечатать массив 'splited' после его назначения. Посмотрите, что он показывает – 3kings

+1

Хмм, это, кажется, String s, это весь текстовый файл (при распечатке, до разделения строк). – TopKek

+0

Ahh поэтому у вас не должно быть новых символов строки в файле после каждой строки – 3kings

ответ

0

Это содержимое вашего файла:

John Jobs 225 Louis Lane Road 
Amy Jones 445 Road Street 
Corey Dol 556 The Road 

Когда каждая строка считывается и разъемные, splitted содержит 6 элементов для первого запуска и 5 для последующих запусков. поэтому, если вы не используете индексы тщательно, вы, очевидно, получите IndexOutOfBoundsException.

Лучше было бы использовать цикл Еогеасп:

while (sc.hasNextLine()) { 
       String s = sc.nextLine(); 
       splitted = s.split("\\s+"); 
       //System.out.println(Arrays.toString(splitted)); 
       for (String string : splitted) { 
        System.out.print(string+" "); 
       } 
       System.out.println(); 
.....rest of code 
Смежные вопросы