2017-10-11 20 views
1

我有兩個像這樣的字符串:"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

+2

爲什麼不是'String.contains(「==」)' –

+0

我想確定一個''=「'caharacters。 –

+1

改爲'!myString.contains(「==」)''。 –

回答

3

在Java中,Matcher.match()會嘗試將整個字符串相匹配。要在中間找到一個子字符串,應該使用Matcher.find()

Pattern pattern = Pattern.compile("[^=][=][^=]"); 
Matcher matcher = pattern.matcher("A=B"); 

System.out.println(matcher.find()); 

這將返回true對於只有單一'='任何字符串。並返回false包含'=='的字符串。

+0

@Lokesh,你確定你知道OP想要什麼嗎?他希望A = B ==> true,而A == B ==> false。 – Alex

+0

基本上OP想檢查一個字符串是否包含賦值運算符或等於運算符。如果它包含賦值運算符,它應該返回true否則如果它包含等於運算符,則它應該返回false。 – Lokesh

+0

@Lokesh,所以「A == B」返回false是正確的。 – Alex

0

嘗試再次構建正則表達式。使用https://regexr.com來解決它。你只將模式匹配爲「A = B」「C = D」「= A = B」並將其改爲「[^ =] [=] [^ =] [=] [^ =]」將使其識別爲「A = B = C「和」A = F = R「或」= A = B = C「。因此檢查你的正則表達式。 enter image description here

+0

我已經試過了。奇怪它正在使用regexr而不是java。 –

+0

爲什麼需要一個正則表達式,如果這個問題可以通過字符串函數輕鬆解決? – Lokesh

+0

你想要做什麼? –

1

你可以簡單地做!myString.contains("==")將返回true如果myString沒有==。如果你想保證至少一個=然後做

myString.contains("=") && !myString.contains("==") 
+0

我認爲我的解釋不夠充分。如果它包含一個「=」字符,那麼它是一個無效的字符串。您的代碼不適用於此:'A == B && A = B'。這也應該是無效的。 –

+0

@JosephK。我的答案中的兩個表達式都將評估爲'false',因爲它包含'=='。我現在感到困惑,因爲你在這裏的評論似乎與你原來的問題相反。 「如果它包含一個=字符個體,它是一個無效的字符串」,你是什麼意思?這似乎與你的原始問題「例如」C = D「應該返回真」相矛盾。 –

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 

雖然給出的最後一個例子,我不知道這是不是最好使用像XTextANTLR一個工具,它在解析表達式提供一個更好的方式。