Относительно метода split () в Java String API

1

Я написал следующий 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
как выход.

  • 4
    Это не лишний пробел; это строка нулевой длины.
  • 0
    Нет, каждое пространство создает новое поле. Попробуйте 10 5 (2 пробела между двумя числами) для другого эксперимента.
Показать ещё 2 комментария
Теги:
string

1 ответ

6
Лучший ответ

Если у вас есть разделитель в качестве первого символа, split будет возвращать пустую строку в качестве первого элемента выходного массива (т. " 10 5".split(" ") возвращает массив {"","10","5"}).

Аналогично, если у вас есть два последовательных разделителя, split приведет к созданию пустой строки. Таким образом, "10 5".split(" ") будет создавать массив {"10","","5"}.

Если вы хотите игнорировать игнорирование пропущенных и завершающих пробелов, измените str.split(" "); to str.trim().split(" "); ,

  • 0
    Рассмотрим str = ",10,,,5,".split(",") . Первым символом является разделитель ',' , поэтому мы добавляем маркер перед этим "" , в массив str . Тогда оставшаяся строка: "10,,,5," . Теперь первый символ не ',' , поэтому мы будем двигаться дальше, пока не найдем ',' , и добавим токен до этого, "10" , в массив str . Теперь мы остались с ",,5," . Первым символом является ',' поэтому мы добавляем маркер перед этим, "" , к str , и повторяем для следующего символа, который также является ',' .
  • 0
    (Продолжение) Наконец, мы остались с "5". Первый символ '5' не является "," , поэтому мы переходим к ',' и добавляем маркер перед этим, "5" , к строке, и все готово. Так что str = {"", "10", "", "", "5"} ? Это то, что здесь происходит?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню