是否有可能告诉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)"]
答案 0 :(得分:47)
是的,绝对:
test.split("\\(", 2);
正如the documentation for String.split(String,int)
所解释的那样:
limit
参数控制的次数 应用模式,因此影响结果的长度 阵列。如果极限 n 大于零则为模式 将最多应用 n - 1次,阵列的 length将不大于 n ,并且数组的最后一个条目 将包含除最后一个匹配分隔符之外的所有输入。
答案 1 :(得分:4)
答案 2 :(得分:2)
尝试使用此解决方案,它比使用正则表达式更通用,更快速,更简单:
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, ')')));