Поведение String.split в Java 1.6?

Мой код:

String s = "1;;;; 23;;";
System.out.println(s.split(";").length);

и дает в качестве вывода 5, Исходный код split является:

public String[] split(String regex) {
        return split(regex, 0);
    }

и в документации сказано:

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

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

Regex Result
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }

Если я печатаю строки, у меня есть:

1



 23

Я не должен получить от этого 1;;;; 23;; что-то вроде {"1", "", "", "", " 23", ""}?

3 ответа

Решение

Нет, пять правильно, как указано в ваших документах:

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

Именно поэтому пустые строки в конце массива опущены. Если вы хотите пустые строки, сделайте так, как сказал ответ Евгения Дорофеева, и укажите предел -1.

Так как limit = 0, конечные пустые строки не включены. Пытаться

System.out.println(s.split(";", -1).length);

и вы получите 7

Он будет разбивать строку, когда когда-либо ';' представить и положить в массив.

Другие вопросы по тегам