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)"]
そのとおり:
_test.split("\\(", 2);
_
String.split(String,int)
の説明では、次のように説明されています。
limit
パラメータは、パターンが適用される回数を制御するため、結果の配列の長さに影響します。限界なら ん ゼロより大きい場合、パターンは最大で適用されます ん -1回、配列の長さは ん、および配列の最後のエントリには、最後に一致した区切り文字を超えるすべての入力が含まれます。
このソリューションを試してみてください。これは、正規表現を使用するよりも汎用的で高速かつ単純です。
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, ')')));