Поведение 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
Он будет разбивать строку, когда когда-либо ';' представить и положить в массив.