метод split класса String игнорирует разделители с запятой

Возможный дубликат:
Метод split() Java разбивает пустые строки в конце?

В Java я использую метод разделения строк, чтобы разделить строку, содержащую значения, разделенные точкой с запятой.

В настоящее время у меня есть следующая строка, которая работает в 99% случаев.

String[] fields = optionsTxt.split(";");

При использовании следующей строки все идеально:

"House;Car;Street;Place" => [House] [Car] [Street] [Place]

Но когда я использую следующую строку, метод split игнорирует последние две точки с запятой.

"House;Car;;" => [House][Car]

Что не так? Или есть обходное решение?

Ответ 1

Попробуйте ниже:

String[] = data.split(";", -1);

Обратитесь к Javadoc для метода split используя два аргумента для деталей.

При вызове String.split(String) он вызывает String.split(String, 0) и отбрасывает завершающие пустые строки (как говорят документы), при вызове String.split(String, n) с n < 0 он выиграл ' Отбросьте что-нибудь.

Ответ 2

Вы можете использовать гуавы Splitter

Из документации:

Splitter.on(',').split("foo,,bar, quux")

Вернется итерабельность ["foo", "", "bar", " quux"]

Ответ 3

Это явно указано в javaadocs Java API:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

"Поэтому трейлинг пустые строки не включаются в результирующий массив".

Если вы хотите пустые строки, попробуйте использовать версию с двумя аргументами того же метода с отрицательным вторым аргументом:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String,%20int)

"Если n не является положительным, шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину".

Изменение: Хм, мои ссылки с якорями не работают.