У меня есть эта программа
String s = "aa";
String[] tokens = s.split("a");
System.out.println(tokens.length);
Он напечатает 0
Теперь, когда я изменяю строку s на "aa aaaa"
это будет печатать только 3, но почему? это должно быть 6?
И когда я добавлю место после "aa aaaa "
он будет печатать 7, которое должно быть ожидаемым значением.
Так почему же метод split ведет себя так?
Поскольку документация split method
говорит:
Trailing empty strings are therefore not included in the resulting array.
(Скользящая пустые строки) также может ссылаться на регулярное выражение, вы даете, который находится в вашем примере:, означает, что все конечные обыкновение быть в результирующем массиве. a
a
Итак, давайте посмотрим, как он разделен
"aa"
будет печатать 0, потому что это завершающий
"aa a"
напечатает 3
Теперь к тому времени, вы добавляете пространство оно не будет прицепным больше, строка теперь будет расщепляется между начиная с первого индекса до известной задней. a
a
a
"aa aaaa"
прежнему печати 3, потому что aaaa
является трейлинг a
"aa aaaa "
напечатает 7
Теперь опять не отставая больше для этого будет расщепляются между a
a's
Splits this string around matches of the given regular expression. This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.
Пример:-
Строка boo:and:foo
, например, дает следующие результаты с этими выражениями:
Regex Result: { "boo", "and", "foo" } o { "b", "", ":and:f" }
Следовательно, все задние a
будут отброшены. Чтобы выполнить полный сплит, возвращающий каждый отдельный элемент: -
String s = "aa";
String[] tokens = s.split("");
System.out.println(tokens.length); //this will output 3 :- "","a","a"