Entendiendo useDelimiter in Scanner: ¿por qué obtengo el token en blanco?

Estoy usando un escáner con delimitador y me he encontrado con un comportamiento extraño que me gustaría entender.

Estoy usando este programa:

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

La salida es:

Aller
à

Navigation
rechercher

Así que primero no entiendo por qué recibo una ficha en blanco, eldocumentación dice :

Dependiendo del tipo de patrón de delimitación, se pueden devolver los tokens vacíos. Por ejemplo, el patrón "\ s +" no devolverá tokens vacíos ya que coincide con varias instancias del delimitador. El patrón de delimitación "\ s" podría devolver tokens vacíos, ya que solo pasa un espacio a la vez.

Estoy usando\\s+ Entonces, ¿por qué devuelve un token en blanco?

Luego hay otra cosa que me gustaría entender con respecto a las expresiones regulares. Si cambio el delimitador usando la expresión regular "invertida":

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

La salida es correcta y me sale:

Aller
à
Navigation
rechercher

¿Por qué funciona en el camino?

EDITAR:

Con este caso:

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

Todavía tengo una ficha en blanco entreintroduction yapprox. ¿Es posible evitarlo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta