Подтвердить что ты не робот

Разделить сначала найденную строку в 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)"]
4b9b3361

Ответ 1

Да, абсолютно:

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

Как в документации для String.split(String,int) объясняется:

Параметр limit управляет количеством раз  шаблон применяется и, следовательно, влияет на длину  массив. Если предел n больше нуля, то шаблон  будет применяться не более чем через n - 1 раз, массив  длина будет не больше n, а последний элемент массива  будет содержать все входные данные за пределами последнего сопоставленного разделителя.

Ответ 2

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

Подробнее о javadoc для получения дополнительной информации

РЕДАКТИРОВАТЬ: экранированный скобок, согласно комментарию @Pedro ниже.

Ответ 3

Попробуйте это решение, оно общее, быстрее и проще, чем использование регулярного выражения:

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, ')')));