2017-10-11 10 views
1

私はこのような2つの文字列を持っています:"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

私は単一の '" = "'カハラクタを決定したいのですか? –

+1

代わりに '!myString.contains(" == ")'を実行してください。 –

答えて

3

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 ==> falseの間にA = B ==> trueを求めます。 – Alex

+0

基本的には、文字列に代入演算子または演算子と等しいかどうかをチェックしたい。代入演算子が含まれている場合はtrueを返し、そうでない場合はfalseを返す必要があります。 – Lokesh

+0

@ Lokeshなので、 "A == B"はfalseを返します。 – Alex

0

Regexを再度ビルドしようとしています。それを解決するにはhttps://regexr.comを使用してください。パターンは "A = B" "C = D" "= A = B"のみに一致し、 "[^ =] [=] [=] [=] [^ =]"に変更すると、 = B = C "および" A = F = R "または" = A = B = C "である。したがって、正規表現をチェックしてください。 enter image description here

+0

私はすでに試しました。不思議なことに、正規表現では動作しますが、Javaでは動作しません。 –

+0

この問題が文字列関数で簡単に解決できる場合、正規表現が必要なのはなぜですか? – Lokesh

+0

あなたは何をしたいですか? –

1

あなたは、単に==を持っていないtruemyString場合に返される!myString.contains("==")を行うことができます。あなたは、少なくとも1 =を保証したい場合は、文字列全体にマッチしようとするJavaでは

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

私の説明は不十分だと私は思います。それが '= '文字の個体を含んでいる場合、それは無効な文字列です。あなたのコードはこのためには機能しません: 'A == B && A = B'。これも無効にする必要があります。 –

+0

@JosephK。私の答えの両方の式は '=='を含んでいるので、この例では 'false'と評価されます。私は今あなたのコメントがあなたの元の質問の反対に見えるので、今混乱しています。 「文字が含まれていて文字列が無効な文字列である」とはどういう意味ですか?これは矛盾しているようです "たとえば、" C = D "は元の質問から真を返すべきです。 –

1

=記号の前後に任意の長さと空白を許可すると仮定すると、対応する正規表現は"[^=]+=[^=]+"です。最後の例を与えますが、解析式でより良い方法を提供XTextANTLRのようなツールを、使用することをお勧めしていない場合

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 

は、私は疑問に思います。