ведущие пробелы при использовании строки.расщеплять()


Вот код, который я использую для разделения строки

str = "1234".split("") ; 
System.out.println(str.length) ; //this gives 5

Есть дополнительный пробел, добавленный непосредственно перед 1 то есть str[0]=" " Как разделить эту строку, не имея переднего пробела.

6 2

6 ответов:

Попробуйте это:

char[] str = "1234".toCharArray();
System.out.println(str.length) ;

Вы на самом деле не получаете ведущий элемент пробела, вы получаете ведущую пустую строку , Как видно из печати всего массива:

System.out.println(java.util.Arrays.toString("1234".split("")));

Вывод:

[, 1, 2, 3, 4]

Обоснованием такого поведения является тот факт, что "1234".indexOf("") является 0. То есть, строка-разделитель совпадает с началом искомой строки, и таким образом она создает там разделение, давая пустой начальный элемент в возвращаемом массиве. Разделитель также совпадает в конце строки, но вы не получите там дополнительный пустой элемент, потому что (как говорится в документации String.split) "конечные пустые строки будут отброшены".

Однако поведение было изменено для Java 8. Теперь в документации также говорится:

Если в начале этой строки имеется совпадение с положительной шириной, то в начало результирующего массива включается пустая ведущая подстрока. совпадение нулевой ширины в начале, однако, никогда не приводит к такому пустому началу подстрока.

(сравните документацию String.split для Java 7 и Java 8.)

Таким образом, на Java 8 и выше вывод из приведенного выше примера выглядит следующим образом:

[1, 2, 3, 4]

Для получения дополнительной информации об изменении см.: Почему в Java 8 split иногда удаляет пустые строки при запуске массива результатов?

В любом случае, использовать String.split в данном конкретном случае излишне. Другие ответы верны: чтобы получить массив всех символов, вы должны использование str.toCharArray(), это быстрее и проще. Если вам действительно нужен массив односимвольных строк, а не массив символов, то смотрите: разбить строку на массив символьных строк.

Вместо этого используйте toCharArray ()....................

Если вы хотите разделить на "" , то следует использовать метод tochararray строки.

String str = "1234";
System.out.println(str.toCharArray().length);

Если вы используете Java 7 или ниже, используйте следующее:

"1234".split("(?!^)")

Я бы просто сделал:

str = "1 2 3 4".split(" ");  

Если, конечно, нет особой причины, почему это должно быть "1234"