【发布时间】:2017-12-09 03:37:04
【问题描述】:
在 Java 中遇到了一个奇怪的正则表达式匹配行为。第一个输出命令按预期打印true,但是当将相同的字符串打包到Scanner 中时,输出为false。我做错了什么?
public static void main(String[] args) {
Pattern p = Pattern.compile(" *\\[");
System.out.println(p.asPredicate().test("[]")); //true
Scanner s = new Scanner("[]");
System.out.println(s.hasNext(" *\\[")); //false
}
【问题讨论】:
-
试试
s.hasNext(p) -
@horcrux 来自 javadoc:此方法的调用形式为 hasNext(pattern) * 行为方式与调用完全相同 * hasNext (Pattern.compile(pattern)).
-
@SpaceTrucker 你是对的。所以重点是
Pattern.compile(myRegex)p.asPredicate().test(myString)在myString中搜索myRegex的出现,而new Scanner(myString).hasNext(myRegex)检查myString的全部内容是否与myRegex匹配。
标签: java regex java.util.scanner