通过多个正则分配Java中的字符串

  • 本文关键字:Java 字符串 分配 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"}

如何解决此问题?

预先感谢。

作为一个选项,您可以将所需的元素串联(这只是示例代码,我没有测试):

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.

但我建议您遵循约翰·布林(John Bollinger)的建议。编写自己的简单解析器以拆分输入字符串。那并不难。

最新更新