条件式の配列を作成するために使用するこのメソッドがあります。
private void convertToList() {
String regex = "[-]?[0-9]+([eE][-]?[0-9]+)?|([-+/*\\\\^])|([()])|(!)|(>=)|(<=)|(<)|(>)|(&&)|(==)|(!=)|([|][|])|(\\[)|(\\])|(and)|(or)|(not)|(true)|(false)|([A-Za-z_][A-Za-z_0-9]*)";
Matcher m3 = Pattern.compile(regex).matcher(this.stringExp);
this.arrayExp = new ArrayList<String>(this.stringExp.length());
while (m3.find()) {
arrayExp.add(m3.group());
}
}
式には、単語、数字、および演算子 (正規表現で確認できます) を含めることができます。
ここで、トークン化する前に式が有効かどうかを確認したいと思います。私はこれを試しましたが、うまくいきません。
private static void checkString(String s){
String regex = "[-]?[0-9]+([eE][-]?[0-9]+)?|([-+/*\\\\^])|([()])|(!)|(>=)|(<=)|(<)|(>)|(&&)|(==)|(!=)|([|][|])|(\\[)|(\\])|(and)|(or)|(not)|(true)|(false)|([A-Za-z_][A-Za-z_0-9]*)";
Matcher m3 = Pattern.compile(regex).matcher(s);
if (m3.matches()){
System.out.println("OK");
} else {
System.out.println("Not ok");
}
}
有効な文字列の例:
"a + b < 5"
"a <= b && c > 1 || a == 4"
とにかくそうするには?