Понимание useDelimiter в Сканере: почему я получаю пустой токен?

Я использую сканер с разделителем, и я столкнулся со странным поведением, которое я хотел бы понять.

Я использую эту программу:

    Scanner sc = new Scanner("Aller à : Navigation, rechercher");
    sc.useDelimiter("\\s+|\\s*\\p{Punct}+\\s*");
    String word="";
    while(sc.hasNext()){
        word = sc.next();
        System.out.println(word);
    }

Выход:

Aller
à

Navigation
rechercher

Поэтому сначала я не понимаю, почему я получаю пустой токен,документация говорит:

Depending upon the type of delimiting pattern, empty tokens may be returned. For example, the pattern "\s+" will return no empty tokens since it matches multiple instances of the delimiter. The delimiting pattern "\s" could return empty tokens since it only passes one space at a time.

Я использую\\s+ так почему он возвращает пустой токен?

Тогда есть еще одна вещь, которую я хотел бы понять относительно регулярных выражений. Если я изменю разделитель с помощью & quot; перевернутого & quot; регулярное выражение:

    sc.useDelimiter("\\s*\\p{Punct}+\\s*|\\s+");

Вывод правильный, и я получаю:

Aller
à
Navigation
rechercher

Why it works in the way?

РЕДАКТИРОВАТЬ :

С этим делом:

    Scanner sc = new Scanner("(23 ou 24 minutes pour les épisodes avec introduction) (approx.)1");
    sc.useDelimiter("\\s*\\p{Punct}+\\s*|\\s+"); //second regex

У меня все еще есть пустой токен междуintroduction а такжеapprox, Можно ли этого избежать?

Ответы на вопрос(2)

Ваш ответ на вопрос