Почему String.Split (регулярное выражение) в java возвращает массив элементов размером меньше того, что на самом деле присутствует?

#java #arrays #string #split

#java #массивы #строка #разделение

Вопрос:

Количество возвращаемых элементов меньше, чем я ожидал при запуске String.split()

Пример:- Фактическая строка — «country,12345,2,1,,1,,», итак, ожидалось, что в возвращаемом массиве будет 8 элементов, но размер массива был «6»

Код:-

 String line1 = "country,12345,2,1,,1,,";
String data1[] = line1.split(",");      
System.out.println("Length : " data1.length);
  

Вывод:-

 Length : 6
  

Почему это так?

Комментарии:

1. попробуйте вывести каждый из элементов в массиве, чтобы увидеть, что внутри?

2. Какую версию Java вы используете? Я думаю, что это было изменено с Java 8, потому что он всегда печатает 8 для меня.

3. @Aru Я только что заметил, снова просматривая вопрос, что этот точный пример кода будет печатать 8 (потому что последнее поле не пустое — после последней запятой есть пробел), но в приведенном выше «примере» нет пробела в конце, и с этим значением для line1 вы получите 6.

4. Научитесь всегда читать JavaDoc того, что вы используете!

Ответ №1:

Потому что split метод с одним аргументом удаляет конечные пустые поля. Если вы хотите сохранить их, используйте версию с двумя аргументами, с отрицательным limit параметром.

 String data1[] = line1.split(",", -1); 
  

Ответ №2:

Спасибо @Ian Roberts

Split() метод удаляет конечные пустые поля, поэтому конечные пустые поля не будут учитываться.

для лучшего понимания смотрите Код ниже —

Случай 1:

 String line1 = "country,12345,2,1,,1, ,";
String data1[] = line1.split(",");
System.out.println("Length : " data1.length);

Output : 7
  

Поскольку предпоследний символ в запятой является, т.Е. чем-то (но не пустым), split не будет учитывать только последнюю часть.

Случай 2:

 String line1 = "country,12345,2,1,,1,, ";
String data1[] = line1.split(",");
System.out.println("Length : " data1.length);

Output : 8
  

Поскольку последний символ после запятой является, т.Е. чем-то (но не пустым), split будет считать все части.

Ответ №3:

Я думаю, вам нужно изменить регулярное выражение:

String data1[] = line1.split(«\,»);