这可能是一个 quicky。为什么此代码不返回任何内容?
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
try {
Scanner sc = new Scanner("asda ASA adad");
String pattern = "[A-Z]+";
while ((sc.hasNext(pattern))) {
System.out.println(sc.next(pattern));
}
sc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
最佳答案
hasNext(String pattern)
仅当下一个标记与模式匹配时才返回 true
。在您的情况下,"asda"
是下一个标记,它与 "[A-Z]+"
不匹配。文档很清楚,“[the] 扫描仪不会前进超过任何输入”。
如果您将模式更改为 [A-Za-z]+"
,那么您将获得三个 token ,这可能正是您想要的。
如果实际上您只想获取匹配[A-Z]+"
的 token ,那么您可以执行以下任一操作:
- 简单地丢弃不匹配的标记
useDelimiter("[^A-Z]+")
,然后简单地调用next()
- 使用
skip("[^A-Z]+")
- 使用
findInLine([A-Z]+")
提示:如果性能很重要,您会希望使用这些方法的预编译 Pattern
重载。
提示:请记住,"Xooo ABC"
有两个 "[A-Z]+"
匹配项。如果这不是您想要的,那么正则表达式必须更复杂一些。或者您始终可以简单地丢弃不匹配的标记。
关于Java:扫描字符串中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2390500/