#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(«\,»);