2010-12-05 1 views
6

Что должно быть ",7-6-5-4-3-2-1,".split(',') возвращение?Что должно ", 7-6-5-4-3-2-1,". Split (',') вернуться?

кажется вернуть

blank string 
    7-6-5-4-3-2-1 

т.е.. две строки. Я ожидал бы одну или три строки - это пустая строка с обоих концов или только строка между ',' s.

Я не прав? Есть ли хорошее объяснение для текущего поведения?

EDIT:

OK. Так что да, у меня было неправильное ожидание, и нет, нет хорошего объяснения, кроме того, что Java работает именно так :). Благодарю.

EDIT2:

Вы можете получить желаемое поведение с split(",", -1) (Scala 2.8.1)

ответ

12

Вот как это работает. См here, который объясняет версию регулярных выражений в Java из него, но это то же самое, в конце концов:

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

+4

Обратите внимание, что вы можете включить включение пустых строк, используя `s.split (", ", -1)` – 2010-12-05 22:26:42

7

Поведение ожидается. String#split(Char) в конечном счете (через StringLike#split(Char) и String#split(String)) вызывает Java String#split(String, 0), который documented:

[...] шаблон будет применен столько раз, сколько это возможно, массив может иметь любую длину, и замыкающие пустые строки будут быть отброшены

Редактировать - Если вы хотите получить больше контроля над расщеплением строк, смотреть на Splitter в Guava libraries.

Splitter.on(',').split(",7-6-5-4-3-2-1,") 
Смежные вопросы