2016-02-15 7 views
0

Мне нужно разбить строку, которая была прочитана из внешнего файла. Мне удалось разбить строку, используя этот код;String split дает массив за пределами

String[] parts = line.split("\\."); 
String part1 = parts[0]; 
String part2 = parts[1]; 

Теперь, когда я пытаюсь получить доступ к данным, часть1 с индексом [0] работает отлично, однако пытается получить индекс [1] выбросить индекс из исключения границ. Данные, которые я пытаюсь разделить выглядит так

886,0452586206898 27115740907,871643
888,0387931034484 26218442896,246094
890,032327586207 25301777157,154663
892,0258620689656 24365534070,686035
894,0193965517242 23409502709,11487

Am Я имел в виду, чтобы удалить пустое пространство, прежде чем делать строка разделена?

+3

Он должен работать ... Вы уверены, что это 'String' вы распределяете на? – brso05

+0

Он работает для индекса [0] и возвращает 886,888, ... просто не разделяет остальную часть строки –

+2

Отлаживайте и посмотрите, что такое 'parts'. – Manu

ответ

1

Поскольку я очень сомневаюсь, что индекс теряется. Возможно, вы захотите попробовать этот код, чтобы узнать, являются ли данные полностью действительными. Если ошибка по-прежнему возникает, у вас может быть причина ошибки в каком-то другом месте, и вы хотите показать свою силу стека.

while ((line = br.readLine()) != null) { 
    if(line.contains(".")) { 
     String[] parts = line.split("\\."); 
     String part1 = parts[0]; 
     String part2 = parts[1]; 
    } else { 
     System.out.println("Corrupted data as: " + line); 
    } 
} 
+0

Не совсем уверен, почему, поскольку каждая отдельная запись содержит точку, но этот код сработал. Так что спасибо тебе :) –

1

Я думаю, вы читаете файл строка за строкой, то вы должны разделить первый против «пространства», а затем снова дот, в противном случае вы получите поврежденные данные ...

886,0452586206898 27115740907,871643

, как вы можете видеть, есть 2 элемента в каждой строке, можно разделить на точки

+0

Да, данные считываются BufferedReader, а затем каждая строка, которую я хочу разделить на точку. Не знаете, что вы подразумеваете под расколом в пространстве, а затем снова точкой? –

+0

Может быть, что в конце нет ни одного разбитого числа. , если вы найдете одну строку с целым числом, тогда у вас будет это исключение .... –

+0

Файл состоит из записей, все из которых выглядят так: вывешенный. Каждая линия имеет, по меньшей мере, одна точка –

0
String[] parts = null; 
    String part1 = null; 
    String part2 = null; 


    System.out.println(parts[2]); 
    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
     parts = line.split("\\."); 
     part1 = parts[0]; 
     part2 = parts[1]; 
    } 

Это не работает, потому что вы т чтобы получить переменную, которую вы указали внутри. Попробуйте объявить вне его.

+0

, откуда вы получили эту информацию? (он также не имеет смысла, так как код выглядит нормально) – SomeJavaGuy

+0

Извините @KevinEsche, я разместил этот код под вашим комментарием ранее. Однако это все равно не работает –

0

Вы хотите извлечь каждое число из ввода, а затем разбить на десятичное число? В этом случае используйте сканер для чтения в каждом номере, а затем раскол:

Scanner s = new Scanner(System.in); 
while (s.hasNext()) { 
    String num = s.next(); 
    String[] parts = num.split("\\."); 
    ... 
} 
Смежные вопросы