Понимание 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
, Можно ли этого избежать?