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