Groovy ошибка метода split ()? - PullRequest
       0

Groovy ошибка метода split ()?

0 голосов
/ 11 октября 2010

Следующий фрагмент Groovy дает мне странные результаты:

def s = "123456"
assert s.split("").size() == s.size()

Результат:

Assertion failed: 

assert s.split("").size() == s.size()
       | |         |      |  | |
       | |         7      |  | 6
       | |                |  123456
       | |                false
       | [, 1, 2, 3, 4, 5, 6]
       123456

Есть что-то, что я пропустил в поведении метода split () илиэто реальная ошибка?

Ответы [ 2 ]

5 голосов
/ 11 октября 2010

Я не знаком с Groovy, но я собираюсь выйти здесь на конечность и предположить, что String.split() работает так же, как и в Java. Это означает, что аргумент, который вы передаете split(), является строкой, представляющей регулярное выражение - в данном случае, пустой строкой. Согласно документам Java :

Этот метод работает как если бы вызывал метод с двумя аргументами split с данным выражением и предельным аргументом, равным нулю. Поэтому завершающие пустые строки не включаются в результирующий массив.

Это означает, что ваш вызов split("") (например, "разбить на пустую строку") эквивалентен split("", 0). Каждая (непустая) строка начинается с , а заканчивается пустой строкой. Таким образом, ваш split("") вызов фактически дает вам [, 1, 2, 3, 4, 5, 6, ], минус завершающие пустые строки , следовательно, [, 1, 2, 3, 4, 5, 6].

4 голосов
/ 11 октября 2010

Почему вы используете split ()?Используйте toCharArray ():

assert s.toCharArray().length == s.size()
...