Java: Строковое разделение (): Я хочу, чтобы это включало пустые строки в конец [дубликат]

Этот вопрос уже имеет ответ здесь:

У меня есть следующая Строка:

String str = "\nHERE\n\nTHERE\n\nEVERYWHERE\n\n";

Если бы Вы просто печатаете это, это произвело бы как это (Конечно, \n не был бы "буквально" распечатан):

\n
HERE\n
\n
THERE\n
\n
EVERYWHERE\n
\n
\n

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

Например, если я делаю это сегодня:

String strArray[] = str.split("\n");

System.out.println("strArray.length - " + strArray.length);
for(int i = 0; i < strArray.length; i++)
    System.out.println("strArray[" + i + "] - \"" + strArray[i] + "\"");

Я хочу, чтобы это распечатало как это (Вывод A):

strArray.length - 8
strArray[0] - ""
strArray[1] - "HERE"
strArray[2] - ""
strArray[3] - "THERE"
strArray[4] - ""
strArray[5] - "EVERYWHERE"
strArray[6] - ""
strArray[7] - ""

В настоящее время это печатает как это (Вывод B), и пропускаются любые конечные пустые строки:

strArray.length - 6
strArray[0] - ""
strArray[1] - "HERE"
strArray[2] - ""
strArray[3] - "THERE"
strArray[4] - ""
strArray[5] - "EVERYWHERE"

Как я делаю split() метод включает пустые строки как в Вывод A? Я, конечно, мог записать многострочную часть кода, но требуемый для знания, прежде чем я потрачу впустую свое время, пытаясь реализовать это, если был простой метод или дополнительные приблизительно два строки кода для помощи мне.Спасибо!

62
задан 27 May 2016 в 01:51

3 ответа

используйте str.split("\n", -1) (с отрицанием limit аргумент). Когда split дан нуль или никакой limit аргумент, он отбрасывает запаздывание пустых полей, и когда он дал положительное limit аргумент, он ограничивает количество полей к тому числу, но отрицательный , предел означает позволять любое количество полей и не отбрасывания, запаздывающего пустые поля. Это документируется здесь , и поведение взято от Perl.

129
ответ дан 31 October 2019 в 13:37

Метод разделения с одним аргументом указан для игнорирования запаздывания разделений пустой строки, но версия, которая берет "предельный" аргумент, сохраняет их, таким образом, одна опция состояла бы в том, чтобы использовать ту версию с большим пределом.

String strArray[] = str.split("\n", Integer.MAX_VALUE);
7
ответ дан 31 October 2019 в 13:37

Лично, мне нравится утилита Guava за разделение:

System.out.println(Iterables.toString(
   Splitter.on('\n').split(input)));

Затем, если Вы хотите настроить поведение пустой строки, можно сделать так:

System.out.println(Iterables.toString(
   Splitter.on('\n').omitEmptyStrings().split(input))); 
3
ответ дан 31 October 2019 в 13:37

Другие вопросы по тегам:

Похожие вопросы: