Я написал следующий Java-код для тестирования метода split()
в String API.
import java.util.Scanner;
public class TestSplit {
public static void main(String[] args) {
String str = "10 5";
String[] integers = str.split(" ");
int numOfInt = integers.length;
for (int i = 0; i < numOfInt; i++) {
System.out.println(integers[i]);
}
}
}
Я заметил, что приведенный выше код дает мне вывод 10
5
что и следовало ожидать.
Однако, если я изменю содержимое str
на " 10 5"
я получу
10
5
как выход. Я не понимаю, почему вывод отличается от результата выше. Если я разделяю str
, используя " "
как разделитель, тогда я думал, что все " "
будут проигнорированы. Итак, какое дополнительное пространство делает мой вывод?
EDIT: я пробовал " 10 5"
и получил
10
5
как выход.
Если у вас есть разделитель в качестве первого символа, split
будет возвращать пустую строку в качестве первого элемента выходного массива (т. " 10 5".split(" ")
возвращает массив {"","10","5"}
).
Аналогично, если у вас есть два последовательных разделителя, split
приведет к созданию пустой строки. Таким образом, "10 5".split(" ")
будет создавать массив {"10","","5"}
.
Если вы хотите игнорировать игнорирование пропущенных и завершающих пробелов, измените str.split(" ");
to str.trim().split(" ");
,
str = ",10,,,5,".split(",")
. Первым символом является разделитель ','
, поэтому мы добавляем маркер перед этим ""
, в массив str
. Тогда оставшаяся строка: "10,,,5,"
. Теперь первый символ не ','
, поэтому мы будем двигаться дальше, пока не найдем ','
, и добавим токен до этого, "10"
, в массив str
. Теперь мы остались с ",,5,"
. Первым символом является ','
поэтому мы добавляем маркер перед этим, ""
, к str
, и повторяем для следующего символа, который также является ','
.
'5'
не является ","
, поэтому мы переходим к ','
и добавляем маркер перед этим, "5"
, к строке, и все готово. Так что str = {"", "10", "", "", "5"}
? Это то, что здесь происходит?
10 5
(2 пробела между двумя числами) для другого эксперимента.