web-dev-qa-db-ja.com

Javaで最初に見つかった文字列で分割

string.split( "(")関数に、最初に見つかった文字列 "("だけで分割する必要があることを伝えることができますか?

例:

String test = "A*B(A+B)+A*(A+B)";
test.split("(") should result to ["A*B" ,"A+B)+A*(A+B)"]
test.split(")") should result to ["A*B(A+B" ,"+A*(A+B)"]
26
Max_Salah

そのとおり:

_test.split("\\(", 2);
_

String.split(String,int) の説明では、次のように説明されています。

limitパラメータは、パターンが適用される回数を制御するため、結果の配列の長さに影響します。限界なら  ゼロより大きい場合、パターンは最大で適用されます  -1回、配列の長さは 、および配列の最後のエントリには、最後に一致した区切り文字を超えるすべての入力が含まれます。

47
ruakh
test.split("\\(",2);

詳細は javadoc を参照してください

[〜#〜] edit [〜#〜]:以下の@Pedroのコメントに従ってエスケープされたブラケット。

4
KingCronus

このソリューションを試してみてください。これは、正規表現を使用するよりも汎用的で高速かつ単純です。

public static String[] splitOnFirst(String str, char c) {
    int idx = str.indexOf(c);
    String head = str.substring(0, idx);
    String tail = str.substring(idx + 1);
    return new String[] { head, tail} ;
}

次のようにテストします。

String test = "A*B(A+B)+A*(A+B)";
System.out.println(Arrays.toString(splitOnFirst(test, '(')));
System.out.println(Arrays.toString(splitOnFirst(test, ')')));
2
Óscar López