首先在Java中找到String

时间:2012-03-26 14:08:21

标签: java regex java-ee java-6

是否有可能告诉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)"]

3 个答案:

答案 0 :(得分:47)

是的,绝对:

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

正如the documentation for String.split(String,int)所解释的那样:

  

limit参数控制的次数    应用模式,因此影响结果的长度    阵列。如果极限 n 大于零则为模式    将最多应用 n - 1次,阵列的    length将不大于 n ,并且数组的最后一个条目    将包含除最后一个匹配分隔符之外的所有输入。

答案 1 :(得分:4)

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

有关详细信息,请参阅javadoc

编辑:Escaped括号,根据@ Pedro的评论如下。

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