2017-07-08 6 views
5

文字列を複数の文字列に分割しようとしていますが、単純な正規表現パターンを1つだけ使用するのではなく、特定の文字が検出された場合は文字列を別の文字列に変換しますが、文字は異なります。文字列を別の文字列に分割するのではなく、文字列内のそれぞれの文字を私に与えてくれます。上記の行を使用してさまざまなキャプチャグループを持つ正規表現を使用して文字列を複数の文字列に分割する

String[] splitstr = line.split("([&]{2})?([|]{2})?(!=)?"); 

、私は例として、私は、ファイルからこの行を入れています、lineという変数がありますへの道があるかどう

:if[input=right || input=Right]: 

私は疑問に思って

":if[input=right", "input=Right]:" 

そして、私はこのような行に置く場合には、この分割を行います210

それは私が||シンボルのString#split(regex)を使用していたし、それがうまく働いたが、今私はそれを分割したいこと||または&&または!=であり、私は自分のしたいことどこ

":if[input=right", "input=Right", "input != null]:" 

に分かれるようにするにはコードは効率的で清潔で読みやすい。

答えて

2

以下のJavaクラスあなたのサンプル文字列を興味のある部分に分割します。コードは分割されます元の文字列はすべて '||' 「& &」の区切り文字である。もしあなたが複数の '||'または元の文字列に '& &'演算子を使用すると、各部分が分割されます。

注目すべきは、特殊文字をエスケープ(\)する必要があることです。 Javaでは、エスケープもエスケープする必要があるので、文字列にリテラルを入れるには2つのバックスラッシュが必要です。

ここで正規表現コードを試すには絶好の場所だ... Regular Expressions 101

public class splitStrRegex { 

    public static void main(String[] args) { 

     String myStr = ":if[input=right || input=Right && input != null]:"; 
     String[] myStrings = myStr.split("\\|\\||&&"); 
     for(int i = 0; i < myStrings.length; i++) { 
      System.out.println(myStrings[i].trim()); 
     } 
    } 
} 

出力:

:if[input=right 
input=Right 
input != null]: 
+0

私のああ、神様、私はパイプ記号のためのいくつかの特別な使用があったことを考えていましたパイプを逃れるように言ってくれてうれしいです!ありがとう! –

+0

喜んで私は@AlexCouchを手伝うことができました。あなたの好きな答えに投票することを忘れないでください。また、素晴らしい質問にも感謝します! – MJFoster

0

非常に興味深い質問です。 Java String.split() Regex それはそう、チェックしやすいように、また:

public class Reg { 

    public static void main(String args[]) { 
     String string = "00!=4-0||34 & 55!=6"; 
     String[] parts = string.split("[&||!=]"); 
     for (int i = 0; i < parts.length; i++) { 
      System.out.println("Part: " + parts[i]); 
     } 
    } 
} 

OUTPUT:のようなサイト上でそのためのより多くの答えがあります

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 
Part: 55 
Part: 
Part: 6 

しかしシンボル "& &" の問題点、例えば、:

String string = "00!=4-0||34 && 55!=6"; 
    String[] parts = string.split("[&&||!=]"); 

OUTPUT:

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 && 55 
Part: 
Part: 6 

私たちは、たとえば、他の解釈で& &を理解する必要があることを推測することができます

public class Reg { 

    public static void main(String args[]) { 
     String string = "00!=4-0||34 && 55!=6"; 
     String[] parts = string.split("[&^&||!=]"); 
     for (int i = 0; i < parts.length; i++) { 
      System.out.println("Part: " + parts[i]); 
     } 
    } 
} 

OUTPUT:

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 
Part: 
Part: 55 
Part: 
Part: 6 
関連する問題