我使用 Matcher
实例通过 lookingAt()
方法在某些输入的开头匹配模式。然而,当我从空字符串创建 Pattern
并尝试将其与非空(修剪过的)字符串匹配时,lookingAt()
返回 true。
首先,这正如我所期望的:
String field = "Dave went to Alabama"
String escapedQuery = Pattern.quote("Dave went");
Pattern pattern = Pattern.compile(escapedQuery, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(field);
// matcher.lookingAt() == true
但是,从空字符串生成的此模式也会返回 true:
String escapedQuery = Pattern.quote("");
Pattern pattern = Pattern.compile(escapedQuery, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(field);
//matcher.lookingAt() == true
在编译任何模式之前,所有涉及的字符串都已被修剪。
有人能指出我在这里缺少什么吗?
非常感谢。
最佳答案
这是一个一致性问题。空模式就像空字符串,如果你尝试
System.out.println( "abc".indexOf("") );
您会看到这是在偏移量 0 处找到的。
显然,在长度 > 0 的字符串中,甚至在长度为 0 的字符串中,在许多地方都可以找到长度为 0 的子字符串!
关于java - Matcher LookingAt 方法匹配空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943239/