所以我有这个方法:
String result = resultMap.toString();
if(result.length > 2){
result = result.substring(1, result.length() - 1);
}
System.out.println(result);
由于某种原因,它无法正常工作。将为用户自动生成字符串secretKey,并且他们必须输入要验证的确切字符串。但是,即使输入了正确的字符串,它仍然表示它不正确。
有时它有效,而且大部分都没有。我想知道我在这里做错了什么?
答案 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")
为真,因为正则表达式Java
与Java
匹配。
然而,有很多正则表达式与自己不匹配,如果你随机生成字符串,你很可能找到一个。
例如"a+bc".matches("a+bc")
返回false - 因为没有任何内容符合文字字符+
(a+
匹配一个或多个a
s。
随机字符串很可能会导致某些内容无法编译为正则表达式,在这种情况下,您的代码将抛出PatternSyntaxException
- 例如a[bc
将执行此操作因为有无与伦比的支撑。
要测试两个字符串是否完全相同,请使用.equals()
。