Разбить строку с указанным разделителем без пропуска пустых элементов - PullRequest
7 голосов
/ 01 июня 2011

Прямо сейчас я использую

StringUtils.split(String str, char separatorChar)

для разделения входной строки с указанным разделителем (,).

Пример входных данных:

a,f,h

Вывод

String[] { "a", "f", "h" }

Но со следующим вводом:

a,,h

Возвращает только

String[] { "a", "h" }

Мне нужен только пустой строковый объект:

String[] { "a", "", "h" }

Как мне этого добиться?

Ответы [ 5 ]

12 голосов
/ 01 июня 2011

Если вы собираетесь использовать StringUtils, тогда вызовите метод splitByWholeSeparatorPreserveAllTokens() вместо split().

8 голосов
/ 01 июня 2011

Вы можете просто использовать метод String.split (..) , для StringUtils нет необходимости:

"a,,h".split(","); // gives ["a", "", "h"]
4 голосов
/ 01 июня 2011

Вы можете использовать этот перегруженный split ()

public String[] split(String regex,
                  int limit)

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

Для большего посещения Сплит

3 голосов
/ 01 июня 2011

Обычная String.split делает то, что вам нужно.

"a,,h".split(",") дает { "a", "", "h" }.

ideone.com демонстрация .

1 голос
/ 31 октября 2013

Разделить строку с указанным разделителем без пропуска пустых элементов.

Используйте метод org.apache.commons.lang.StringUtils.splitByWholeSeparatorPreserveAllTokens()

Преимущество перед другими методами другого класса:

  • Он не пропускает ни одну подстроку или пустую строку и отлично работает для всех символов или строк в качестве разделителя.
  • Он также имеет полиморфную форму, в которой мы можем указать максимальное количество токенов, ожидаемое от данной строки.

String.Split() метод принимает регулярное выражение в качестве параметра, поэтому он будет работать для некоторых символов в качестве разделителя, но не для всех , например: pipe (|) и т. Д. Мы должны добавить escape-символ к pipe (|), чтобы он работал нормально.

Tokenizer (строка или поток) - пропускает пустую строку между delimiter's.

...