Этот вопрос уже имеет ответ здесь:
У меня есть следующая Строка:
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? Я, конечно, мог записать многострочную часть кода, но требуемый для знания, прежде чем я потрачу впустую свое время, пытаясь реализовать это, если был простой метод или дополнительные приблизительно два строки кода для помощи мне.Спасибо!
используйте str.split("\n", -1)
(с отрицанием limit
аргумент). Когда split
дан нуль или никакой limit
аргумент, он отбрасывает запаздывание пустых полей, и когда он дал положительное limit
аргумент, он ограничивает количество полей к тому числу, но отрицательный , предел означает позволять любое количество полей и не отбрасывания, запаздывающего пустые поля. Это документируется здесь , и поведение взято от Perl.
Метод разделения с одним аргументом указан для игнорирования запаздывания разделений пустой строки, но версия, которая берет "предельный" аргумент, сохраняет их, таким образом, одна опция состояла бы в том, чтобы использовать ту версию с большим пределом.
String strArray[] = str.split("\n", Integer.MAX_VALUE);
Лично, мне нравится утилита Guava за разделение:
System.out.println(Iterables.toString(
Splitter.on('\n').split(input)));
Затем, если Вы хотите настроить поведение пустой строки, можно сделать так:
System.out.println(Iterables.toString(
Splitter.on('\n').omitEmptyStrings().split(input)));