字符串matches()方法无法正常工作

时间:2017-04-07 15:20:42

标签: java regex string

所以我有这个方法:

String result = resultMap.toString();
if(result.length > 2){
   result = result.substring(1, result.length() - 1);
}
System.out.println(result);

由于某种原因,它无法正常工作。将为用户自动生成字符串secretKey,并且他们必须输入要验证的确切字符串。但是,即使输入了正确的字符串,它仍然表示它不正确。

enter image description here

有时它有效,而且大部分都没有。我想知道我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

String#matches接受定义正则表达式的字符串。如果要检查是否相等,请使用equals,而不是matches

"oH-?bt-4#"包含?,这是正则表达式中的特殊字符,而不是文字?。所以字符串与正则表达式不匹配。

答案 1 :(得分:1)

匹配采用正则表达式作为参数。在屏幕截图中,您输入了oH-?bt-4#,其中包含?。这个字符在正则表达式中具有特殊含义。如果要使用String#match方法,则必须转义所有特殊字符,例如: G。使用Pattern.quote

if (secretKey.matches(Pattern.quote(userEnters))) //...

由于您的目标似乎是检查两个字符串是否相同,因此您可以使用String#equals方法:

if (secretKey.equals(userEnters)) //...

当你没有理由选择正则表达式方法matches时,你应该坚持使用equals,因为它更有效率。

答案 2 :(得分:1)

根据Javadoc,

  

public boolean matches(String regex)

     

判断此字符串是否与给定的regular expression匹配。

现在,"Java".matches("Java")为真,因为正则表达式JavaJava匹配。

然而,有很多正则表达式与自己不匹配,如果你随机生成字符串,你很可能找到一个。

例如"a+bc".matches("a+bc")返回false - 因为没有任何内容符合文字字符+a+匹配一个或多个a s。

随机字符串很可能会导致某些内容无法编译为正则表达式,在这种情况下,您的代码将抛出PatternSyntaxException - 例如a[bc将执行此操作因为有无与伦比的支撑。

要测试两个字符串是否完全相同,请使用.equals()