我有两个这样的字符串:"A == B", "C = D"
。我想知道字符串是否包含赋值运算符=
或等于==
运算符。例如,"C=D"
应返回true,"C=D=D"
也应返回true。但是"A==B"
应该返回false。我试过"[^=][=][^=]"
,但两个字符串都返回false。
Pattern pattern = Pattern.compile("[^=][=][^=]");
Matcher matcher = pattern.matcher("A=B");
System.out.println(matcher.matches());
这将返回false
,但我想获得true
。
答案 0 :(得分:3)
在Java中,Matcher.match()
将尝试匹配整个字符串。要在中间找到子字符串,您应该使用Matcher.find()
代替。
Pattern pattern = Pattern.compile("[^=][=][^=]");
Matcher matcher = pattern.matcher("A=B");
System.out.println(matcher.find());
对于任何仅包含true
的字符串,这将返回'='
。并且会为包含false
的字符串返回'=='
。
答案 1 :(得分:1)
如果!myString.contains("==")
没有true
,您只需myString
即可返回==
。如果您想保证至少有一个=
,那么
myString.contains("=") && !myString.contains("==")
答案 2 :(得分:1)
相应的正则表达式为"[^=]+=[^=]+"
,假设您允许在=符号之前和之后的任何长度和空格。
jshell> "A=B".matches("[^=]+=[^=]+")
$6 ==> true
jshell> "Ad=Bd".matches("[^=]+=[^=]+")
$7 ==> true
jshell> "Ad==Bd".matches("[^=]+=[^=]+")
$8 ==> false
$jshell> "A==B".matches("[^=]+=[^=]+")
$9 ==> false
jshell> "A cow = an animal".matches("[^=]+=[^=]+")
$10 ==> true
jshell> " = ".matches("[^=]+=[^=]+")
$11 ==> true
jshell> "=".matches("[^=]+=[^=]+")
$12 ==> false
jshell> "A==B && A=B".matches("[^=]+=[^=]+")
$13 ==> false
答案 3 :(得分:0)
尝试再次建立正则表达式。使用https://regexr.com来解决它。您只模式匹配“A = B”“C = D”“= A = B”并将其更改为“[^ =] [=] [^ =] [=] [^ =]”将使其识别“A” = B = C“和”A = F = R“或”= A = B = C“。因此,请检查您的正则表达式。 enter image description here