2013-05-11 3 views
1

Я пытаюсь разобрать строку из файла, который выглядит примерно так:Не удается получить подстроки подстроки

Mark Henry, Tiger Woods, James the Golfer, Bob, 
3, 4, 5, 1, 
1, 2, 3, 5, 
6, 2, 1, 4, 

Для простоты использования, я хотел бы отделился первой линией String, потому что он будет единственным, который не может быть преобразован в целочисленные значения (остальные будут сохранены в двойном массиве целых чисел [строка] [значение]);

Я попытался использовать String.split("\\\n"), чтобы разделить каждую строку на свою собственную строку, которая работает. Однако я не могу разделить новые строки на подстроки с String.split("\\,"). Я не уверен, что происходит:

String[] firstsplit = fileOne.split("\\\n"); 
    System.out.println("file split into " + firstsplit.length + " parts"); 

    for (int i = 0; i < firstsplit.length; i++){ 
     System.out.println(firstsplit[i]); // prints values to verify it works 
    } 

    String firstLine = firstsplit[0]; 
    String[] secondSplit = firstLine.split("\\,"); 
    System.out.println(secondSplit[0]); // prints nothing for some reason 

Я пробовал различные вещи с этим, и ничто не похоже на работу (копирование на новый String, попытка заставить его работать даже) , Какие-либо предложения?

EDIT: Я изменил его на String.split (","), а также попробовал String.split (","), но мне все равно нечего печатать впоследствии.

Теперь мне кажется, что, возможно, первое место пустое. После тестирования я нашел, что это правда, и все работает для firstsplit [1];

+0

Вам не нужно скрывать запятую. –

+0

это просто «,» не нужно бежать с помощью «\» или «\\», – dantuch

+0

's.split (", ")' будет делать это: ',' ​​не имеет специального значения в регулярном выражении контекст. – skuntsel

ответ

3

Вы пытаетесь разбить \\,, что соответствует фактическому значению \,. Вы хотите избежать только ,.

+0

Да, избегая регулярных выражений и тому подобное, это очень запутывает. –

2

Запятая , не нуждается в \ перед этим, поскольку это не особый символ. Попробуйте использовать , вместо \\,, который переводится в \, (а не только запятую, а также обратную косую черту).

0

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

String[] firstSplit = fileOne.split("\n"); 

Это будет работать нормально. Я протестировал ваш код с указанной вами строкой, и он действительно работал просто отлично, и он также работал просто мелким расщеплением без посторонних побегов ...

Вы действительно протестировали его со строковыми данными, указанными в вопросе, или, возможно, это фактические данные. Я беспокоился о возврате каретки (\r\n, например, в файлы Windows), но это тоже не имело значения в моем тесте. Если вы можете очистить данные String, которые вы на самом деле разбираете, и предоставить образец вывода исходной строки (fileOne), что значительно поможет.

0

Вы можете просто загрузить файл в список строк:

fin = new FileInputStream(filename); 
bin = new BufferedReader(new InputStreamReader(fin)); 
String line = null; 
List<String> lines = new ArrayList<>(); 
while ((line = bin.readLine()) != null) { 
    lines.add(line); 
} 
fin.close(); 

Конечно, вы должны включить этот материал в некоторые пытаются поймать блок, который помещается в вашу обработку исключений. Затем проанализируйте строки, начинающиеся со второго, следующим образом:

for (int i = 1; i < lines.size(); i++) { 
    String[] values = lines.get(i).split(","); 
} 
Смежные вопросы