У меня вопрос по поводу 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 на самом деле является пустым массивом 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 дал правильное объяснение. Просто добавьте, что если вы все еще хотите сохранить массив с пустыми строками, вы можете использовать
String[] s_ = str.split("a", 6);
System.out.println("s_ : " + Arrays.toString(s_));
или любое другое ограничение (количество применений шаблона), превышающее 6, вместо простого разделения.
Последний будет печатать,
s_ : [, , , , , ]
"str1 == null" нет, это массив нулевой длины.