Что должно возвращать ", 7-6-5-4-3-2-1,". Split (',')? - PullRequest
6 голосов
/ 05 декабря 2010

Что должно ",7-6-5-4-3-2-1,".split(',') вернуть?

Кажется, что возвращается

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

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

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

РЕДАКТИРОВАТЬ:

ОК.Так что да, у меня были неверные ожидания, и нет, нет хорошего объяснения, кроме того, что Java работает таким образом :).Спасибо.

РЕДАКТИРОВАТЬ2:

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

Ответы [ 2 ]

12 голосов
/ 05 декабря 2010

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

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

7 голосов
/ 05 декабря 2010

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

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

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

Splitter.on(',').split(",7-6-5-4-3-2-1,")
...