Zrozumienie useDelimiter w skanerze: dlaczego otrzymuję pusty token?

Używam skanera z separatorem i natknąłem się na dziwne zachowanie, które chciałbym zrozumieć.

Używam tego programu:

    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);
    }

Dane wyjściowe to:

Aller
à

Navigation
rechercher

Więc najpierw nie rozumiem, dlaczego otrzymuję pusty tokendokumentacja mówi :

W zależności od rodzaju wzoru ograniczającego puste znaczniki mogą zostać zwrócone. Na przykład wzorzec „s +” nie zwróci żadnych pustych tokenów, ponieważ pasuje do wielu wystąpień separatora. Wzorzec ograniczający „s” może zwracać puste żetony, ponieważ mija tylko jedno pole na raz.

używam\\s+ dlaczego więc zwraca pusty token?

Jest jeszcze jedna rzecz, którą chciałbym zrozumieć odnośnie regex. Jeśli zmienię separator za pomocą wyrażenia „odwróconego”:

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

Wynik jest poprawny i otrzymuję:

Aller
à
Navigation
rechercher

Dlaczego to działa na swój sposób?

EDYTOWAĆ :

W tym przypadku:

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

Nadal mam pusty żetonintroduction iapprox. Czy można tego uniknąć?

questionAnswers(2)

yourAnswerToTheQuestion