Java拆分字符串,带有2个分隔符

时间:2015-02-08 19:31:43

标签: java regex string split

我正在尝试使用String.split()分割一些字符串。

我希望它根据字符"++""+"分割字符串。例如,"1 + 1"将被分为{1, +, 1}"1 ++ 1"将被分为{1, ++, 1}。我写了这一行来分割文本:

String[] temp = tokens.split("(?<=(\\++)|(\\+))|(?=(\\++)|(\\+))");

这适用于"1 + 1"(输出:{ 1, +, 1 }),但它不适用于"1 ++ 1"(输出:{ 1, +, +, 1 })。我知道我可以将它转换为ArrayList并找到"+"后跟"+"并简单地将它们合并为一个令牌但是我很好奇是否可以使用{{1}执行此操作}?

2 个答案:

答案 0 :(得分:1)

您可以尝试拆分零个或多个具有

的空格
  • 之前的数字和12|+ 32之后的运算符(我标记为|
  • 或之前的运算符12 ++|32之后的数字。

您的拆分可能看起来像

split("(?<=\\d)\\s*(?=[+])|(?<=[+])\\s*(?=\\d)")

样本:

String[] data = {"1++1" , "1 ++1", "1+ 1"};
for (String str : data){
    for (String token : str.split("(?<=\\d)\\s*(?=[+])|(?<=[+])\\s*(?=\\d)")){
        System.out.println("token: <"+token+">");
    }
    System.out.println("--------");
}

输出(我用<>包围了令牌,以表明他们也摆脱了空格):

token: <1>
token: <++>
token: <1>
--------
token: <1>
token: <++>
token: <1>
--------
token: <1>
token: <+>
token: <1>
--------

答案 1 :(得分:0)

贪婪的量词对我有用:

String [] cases = { "1+1", "1++1"  };
for (String str: cases) {
  String out [] = str.split("(\\+)*");
  System.out.println(Arrays.asList(out));
}

产生

[1, , 1]
[1, , 1]

如果这没有削减它,那么发布更多测试用例。