2016-11-07 10 views
0

演算子のブール式を分離する方法は? 私は、以下の文字列としての表現を持っている:演算子(Java)のブール式を分離する方法は?

String expression = “((468551X68X304.NAOK == \"2\") and (468551X68X305.NAOK > \"2\") and (468551X68X308.NAOK != \"2000\" or 468551X68X308.NAOK > \"2000\")) “; 

私は、アレイ内のすべての変数を取得したいが、例えば:

a[0] = “468551X68X304.NAOK”; 
a[1] = “468551X68X305.NAOK”; 
a[2] = “468551X68X308.NAOK”; 
a[3] = “468551X68X308.NAOK”; 

は、誰かが私にそれを解決するためのアイデアを与えることはできますか?

ありがとう、

+2

あなたは、少なくともあなたが持っていることを実証していない場合は、ここで助けを豊富に取得するつもりはありません何かを試した。 – rmlan

+0

私が必要とするのは、それを解決するためのいくつかのアイデアを知ることです。たぶん表現の演算子を得るライブラリがあるかもしれません。私はJEXLで試しましたが、式を操作するだけですが、演算子を取得しません。 – user3758346

+0

はい。あなたはすでに質問でこれを述べています。しかし、それはこのサイトの仕組みではありません。インターネット上でいくつかの調査を行い、いくつかのコードを書いて、あなたが上記のコードに特定の問題があるときに私たちに来てください。 – rmlan

答えて

0

これは正規表現を使用して行うことができます。

\d+X\d+X\d+\.NAOK 

すべての\d+が1桁以上の数字に一致します。

次の正規表現は、あなたのブール式で変数のようにフォーマットされている変数と一致します。この正規表現を使用して変数を抽出するために

、あなたがこのようなjava.util.regex.Patternjava.util.regex.Matcherを使用することができます。

String booleanExpression = "((468551X68X304.NAOK == \"2\") and (468551X68X305.NAOK > \"2\") and (468551X68X308.NAOK != \"2000\" or 468551X68X308.NAOK > \"2000\")) "; 
String regex = "\\d+X\\d+X\\d+\\.NAOK"; // Note that backslash pairs don't denote two backslashes here. Because we're representing the regex as a string literal, we have to use escape sequences to represent the backslashes in the regex 

Matcher m = Pattern.compile(regex).matcher(booleanExpression); 
ArrayList<String> variables = new ArrayList<>(); 
while(m.find()) // Match a NEW variable (one that wasn't matched in previous iterations 
    variables.add(m.group()); // Add the matched variable to the ArrayList