Java: String split (): Я хочу, чтобы он включал пустые строки в конце

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

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] + "\""); 

Я хочу, чтобы он печатался так (Output 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() включать пустые строки, как в Output A? Я, конечно, мог написать многострочный fragment кода, но хотел знать, прежде чем тратить время на его реализацию, если бы был простой способ или дополнительные две строки кода, которые могли бы мне помочь. Благодаря!

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

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

 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))); 
  • Команда не обнаружила ошибку в присвоении переменной Bash
  • Добавить значения в строку запроса
  • Сравнить номера версий без использования функции split
  • Действительно простое сжатие коротких строк
  • Размер файла формата как MB, GB и т. Д.
  • В C, почему я не могу назначить строку массиву символов после ее объявления?
  • Как выполнить команду для каждой строки файла?
  • Формат метода (String, Object ) в типе String не применим для аргументов (...)
  • Как разбить одну строку на несколько строк, разделенных хотя бы одним пространством в оболочке bash?
  • Репликация массива по элементам в Matlab
  • Самый эффективный способ конкатенации строк?
  • Давайте будем гением компьютера.