regexjava的扫描器。如何匹配空白?
假设,我需要匹配包含空格的括号
以下是一个片段:
String input = "( ) ( ) ( )";
Pattern pattern = Pattern.compile("\\(\\s\\)");
Scanner scanner = new Scanner(input);
scanner.useDelimiter("\\n");
Matcher matcher = pattern.matcher(input);
System.out.println(scanner.hasNext(pattern)); // false
System.out.println(matcher.find()); // true
System.out.println(matcher.start(0) + " " + matcher.end(0)); // 0 3
Matcher做的正是我需要的,但Scanner没有
这个问题问得不对。我的目的是用scanner按顺序获取字符串中的所有()标记,因为matcher似乎有不方便的API来完成这类任务。 我应该彻底阅读文档
我需要的方法是:
scanner.findInLine(pattern);
# 1 楼答案
当您使用
"\\n"
作为分隔符(并因此覆盖默认值,即空白)时,整个输入"( ) ( ) ( )"
将成为一个标记当
hasNext
尝试将complete标记与pattern
匹配时,它返回false
从文档中选择方法^{}
因此,在您的例子中,方法调用实际上是试图将
"( ) ( ) ( )"
与"( )"
匹配# 2 楼答案
从扫描仪检查javadoc。下一步(模式):
因此,由于您的模式与整个标记
"( ) ( ) ( )"
不匹配,它将返回false但是
Scanner
有一个名为findInLine
的函数,可以执行您想要的操作:(但是,此方法可以跳过字符…)
# 3 楼答案
如上所述更新您的代码
你误解了。必须将
Pattern
设置为Scanner
对象的分隔符