Entendendo o useDelimiter no Scanner: por que recebo token em branco?
Estou usando o scanner com delimitador e me deparei com um comportamento estranho que gostaria de entender.
Estou 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);
}
A saída é:
Aller
à
Navigation
rechercher
Então, primeiro eu não entendo por que estou recebendo um token em branco, odocumentação diz:
Dependendo do tipo de padrão de delimitação, tokens vazios podem ser retornados. Por exemplo, o padrão "\ s +" não retornará tokens vazios, já que combina várias instâncias do delimitador. O padrão de delimitação "\ s" pode retornar tokens vazios, pois ele passa apenas um espaço por vez.
estou a usar\\s+
então por que ele retorna um token em branco?
Depois, há outra coisa que gostaria de entender sobre o regex. Se eu alterar o delimitador usando o regex "reverso":
sc.useDelimiter("\\s*\\p{Punct}+\\s*|\\s+");
A saída está correta e recebo:
Aller
à
Navigation
rechercher
Por que isso funciona no caminho?
EDITAR:
Com 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
Eu ainda tenho um token em branco entreintroduction
eapprox
. É possível evitá-lo?