ведущие пробелы при использовании строки.расщеплять()
Вот код, который я использую для разделения строки
str = "1234".split("") ;
System.out.println(str.length) ; //this gives 5
Есть дополнительный пробел, добавленный непосредственно перед 1 то есть str[0]=" "
Как разделить эту строку, не имея переднего пробела.
6 ответов:
Вы на самом деле не получаете ведущий элемент пробела, вы получаете ведущую пустую строку , Как видно из печати всего массива:
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()
, это быстрее и проще. Если вам действительно нужен массив односимвольных строк, а не массив символов, то смотрите: разбить строку на массив символьных строк.