метод 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 не является положительным, шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину".
Изменение: Хм, мои ссылки с якорями не работают.