Проблема с Java String.split()

У меня вопрос по поводу java.lang.String.split().

String str = "aaaaa";
String[] str1 = str.split("a");
str = "aaaaa ";
String[] str2 = str.split("a");

System.out.println(Arrays.toString(str1));
System.out.println(Arrays.toString(str2));

Результат

str1 == null
str2 == ["", "", "", "", "", " "]

Почему str1 результат?

"str1 == null" нет, это массив нулевой длины.

Michael 11.03.2019 12:36

Из документации «Поэтому конечные пустые строки не включаются в результирующий массив».. В первом случае каждый элемент является завершающей пустой строкой, поэтому массив пуст. Во втором случае нет завершающих пустых строк.

Michael 11.03.2019 12:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
138
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

str1 на самом деле является пустым массивом String, а не null.

String[] java.lang.String.split(String regex)

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.

Если результат содержит только пустые строки, все они удаляются, а результат str1 оказывается пустым массивом.

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

@AshishkumarSingh Вопрос был только о str1, но я также добавил объяснение о str2.

Eran 11.03.2019 12:45

@Eran дал правильное объяснение. Просто добавьте, что если вы все еще хотите сохранить массив с пустыми строками, вы можете использовать

String[] s_ = str.split("a", 6);
System.out.println("s_ : " + Arrays.toString(s_));

или любое другое ограничение (количество применений шаблона), превышающее 6, вместо простого разделения.

Последний будет печатать,

s_ : [, , , , , ]

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