gpt4 book ai didi

java - 了解 Scanner : why I get blank token? 中的 useDelimiter

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:37 25 4
gpt4 key购买 nike

我正在使用带有定界符的扫描仪,我遇到了一个我想了解的奇怪行为。

我正在使用这个程序:

    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

所以首先我不明白为什么我得到一个空白标记,documentation说:

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+ 那么为什么它会返回一个空白标记?

关于正则表达式,我还想了解另一件事。如果我使用“反向”正则表达式更改分隔符:

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

输出是正确的,我得到:

Aller
à
Navigation
rechercher

为什么会这样?

编辑:

对于这种情况:

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

introductionapprox 之间我还有一个空白标记。是否可以避免?

最佳答案

我有一种感觉,您在空格后跟标点符号的地方引起了两个定界符捕获。为什么不简单地使用 [\\s\\p{Punct}]+

此正则表达式 \\s+|\\p{Punct}+ 将首先捕获空格并将其吞下,然后捕获下一个分隔符作为标点符号。这将是两个彼此相邻的分隔符,中间没有任何内容(空标记)。

关于java - 了解 Scanner : why I get blank token? 中的 useDelimiter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10765597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com