通过多个正则表达式在Java中拆分字符串

时间:2019-03-14 17:15:15

标签: java

我想用字符串分割以下字符串

String ToSplit = "(2*(sqrt 9))/5";

插入以下字符串数组:

String[] Splitted = {"(", "2", "*", "(", "sqrt", "9", ")", ")", "/", "5"};

为此,我使用:

String[] Splitted = ToSplit.split("(?<=[^\\w\\s])(?=\\w)|(?<=\\w)(?=[^\\w\\s])|(?<=[^\\w\\s])(?=[^\\w\\s])|\\s+");

它非常完美,但是,在其他测试中,它包含了双精度的情况,例如

String toSplit = " 2*sqrt(3.0) ";

我想用这种方式分割它:

String[] Splitted = {"2", "*", "sqrt", "(", "3.0", ")"};

但是它出来了

String[] Splitted = {"2", "*", "sqrt", "(", "3", ".", "0", ")"};

因此,如您所见,尽管只有元素“ 3.0”,但我还是得到了三个元素{“ 3”,“。”,“ 0”}

我该如何解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

作为一种选择,您可以连接所需的元素(这只是示例代码,我没有对其进行测试):

String[] splitted = {"2", "*", "sqrt", "(", "3", ".", "0", ")"};
List<String> a = new ArrayList<>();
for (int i = 0; i < splitted.length(); i++) {
    if (splitted[i].equals(".") && i > 0 && i < splitted.length() - 1) {
       a.set(a.size() - 1, a.get(i - 1) + "." + splitted[i + 1]);
       i+=2;
    } else {
       a.add(splitted[i]);
    }
}

//The elements you need are on the 'a' list.

但是我建议您听从约翰·布林格的建议。编写自己的简单解析器以拆分输入String。那并不难。