2016-08-24 3 views
0

В Java РОУ public String\[\] split(String regex)String Java, функция разделения

мы можем найти пример:

Строка "boo:and:foo", например, дает следующие результаты с этими выражениями

Regex                     Результаты

о                                     { "b", "", ":and:f" }

Что такое второй результат "" пришел? От b и oo, или oo и :and:f?

+0

это возвращает две строки, 'b', ': и: f', но почему источник '' не найден? Я знаю, что «+» означает, что «o» должен произойти по крайней мере один раз – user1169587

+0

@ DavidPérezCabrera, если используется split («o +», -1), затем три строки return, «b», «: and: f» и «», не знаю, что произойдет ... почему последний «подсчитан, но« между »и« о »не учитывается? – user1169587

ответ

4

Когда вы используете разделитель o и есть два разделителя рядом друг с другом, он дает пустую строку. Так, например, если у вас есть String foo::bar и разделить его на :, вы получите {"foo", "", "bar"}, потому что пространство между :: рассматривается как пустая строка при расщеплении.

Если вы хотите разделить без каких-либо пустых строк, взгляните на this question.

Завершение пустых строк?

После разделения дается нулю или нет предела аргумент, он не отбрасывает конечные пустые поля

Ref: Java: String split(): I want it to include the empty strings at the end

+1

как насчет последнего оо тогда? , Никакой пустой токен в конце. –

+2

@omkarsirra Да, пустые строки в конце отпадают (посмотрите на это, чтобы рассказать об этом по-разному http://stackoverflow.com/questions/13939675/java-string-split-i-want-it- к включаемых в пустые-стринг-на-на-конце – px06

1

Обратите внимание, что для регулярных выражений, места между символами также рассчитывать. Таким образом, механизм регулярных выражений видит boo:and:foo строку как

<EMPTY>b<EMPTY>o<EMPTY>o<EMPTY>:<EMPTY>a<EMPTY>n<EMPTY>d<EMPTY>:<EMPTY>f<EMPTY>o<EMPTY>o<EMPTY> 
       ^between^              ^between^ 

В качестве первого ^between^ не в конце строки, split сохраняет пустое место (строка) в результатах. Заканчивающиеся пустые элементы удаляются как конец, так как аргумент int limit по умолчанию равен 0. Если вы пройдете -1 (неположительное значение), все конечные пустые элементы будут присутствовать в результирующем массиве. См. String#split ссылка.

Смежные вопросы