2016-06-11 5 views
0

を使用してJavaで複雑なブール式を解析しようとすると、私は次のフォーマットである文字列を解析しようとしています:は正規表現

boolean1 && boolean2 &&..... booleank 

または

boolean1 || boolean3 || .... booleank 

|| & &は、各ブール値の間に現れることができます(これはStringにあり、その文字列がブール値であるかどうかを調べる独自のテストがあります)。 String [] array = {boolean1、boolean2、.... booleank } すべての私のデータは、文字列で来て、(まだ期待のように動作しません)私のコードはこれです:

予想通りこれは動作しません
String line = "a || b && c"; //Just an example to test 
    String[] booleans = line.split("[||,&&]*"); 
    for(String x: booleans){ 
     x = x.replaceall("\\s*",""); 
     System.out.println(x); 
    } 

... 私は印刷にそれをしたい: b c

出力I/O:

enter image description here

+0

何が印刷されますか? – MasterBlaster

+0

imhoそれぞれの 'booleanans [i]'が '' true ''か' 'false" 'でなければ、' boolean 'を' 'literal''に改名するべきです。 – martijnn2008

答えて

2

この正規表現は動作するはずです:

\s*(&&|\|\|)\s* 

使用法:

String line = "a || b && c"; //Just an example to test 
String[] booleans = line.split("\\s*(&&|\\|\\|)\\s*"); 
for(String x: booleans) { 
    System.out.println(x); 
} 

また、空白を削除しますので、以下の行が必要とするべきではありません。

x = x.replaceall("\\s*", ""); 

Try the Java code online

+0

ありがとう、それは働いた。なぜ(&& | \\ | \\ |)あなたが内部に置いたものなのか説明できますか? – Eyzuky

+0

OK私はそれを理解しています。ありがとうございます – Eyzuky

+0

@エイズキー私はあなたを助けることができてうれしいです。フォローアップの質問があり、自分で答えられることを嬉しく思っています。 – andlrc

0

あなたは配列を必要としない場合は、あなたがこれを行うことができます:

String line = "a || b && c"; //Just an example to test 
String newLine = line.replaceAll("(\\|\\|)|&&", ""); 

System.out.println("Line: " + line); 
System.out.println("newLine: " + newLine); 

が出力:

Line: a || b && c 
newLine: a b c 

をそれ以外の場合は、選択した答えは\s*

String line = "a || b && c"; //Just an example to test 
String newLine = line.replaceAll("\\s*(&&|\\|\\|)\\s*", ""); 

System.out.println("Line: " + line); 
System.out.println("newLine: " + newLine); 
ので、すべての空白を削除します

出力:

Line: a || b && c 
newLine: abc