正则表达式用于拆分字符串以获取运算符

时间:2015-03-01 09:54:39

标签: java arrays regex split operators

我有一个String = A + B + CC-D0。 我想使用正则表达式将它拆开以获得一组操作{+,+, - }

我尝试过正则表达式:

"[^+-]"

但输出给了我一个{,+,+ ,, +}的数组,为什么?

    String s1 = "A+B+C-D";
    String s2 = "A0+B0";
    String[] op1 = s1.split([^+-]);
    String[] op2 = s2.split([^+-]);
    for(int i = 0; op1.length; i++){
        System.out.println(op1[i]);
    }

这是输出:

Output of op1:
""
"+"
"+"
""
"-"

Output of op2:
""
""
"+"

2 个答案:

答案 0 :(得分:2)

用空字符串替换运算符以外的所有字符,然后根据两个运算符之间存在的边界拆分结果字符串。

String s1 = "A+B+C-D";
String[] op1 = s1.replaceAll("[^+-]","").split("(?<=.)(?=.)");
for(String i: op1){
    System.out.println(i);
}

输出:

+
+
-
  • (?<=.)肯定的后卫,断言匹配必须以一个字符开头。

  • (?=.)肯定前瞻,断言匹配必须跟一个字符。

答案 1 :(得分:2)

问题是,你要分析单个字符,而不是+-。当您分割字符串 - ABC时,它将被分割3次 - 分别在ABC,因此您将得到一个数组 - {{ 1}}。

要避免此问题,请在正则表达式上使用量词:

["", "", "", ""]

这是String s1 = "A+B+C-D"; String s2 = "A0+B0"; String[] op1 = s1.split("[^+-]+"); String[] op2 = s2.split("[^+-]+"); System.out.println(Arrays.toString(op1)); System.out.println(Arrays.toString(op2)); 分裂。

现在要删除数组开头的空元素,你必须从字符串中删除第一个分隔符,使用"[^+-]+"可能是:

replaceFirst()