【问题标题】:Java Split() to Split Up Math EquationJava Split() 拆分数学方程
【发布时间】:2015-04-03 11:26:11
【问题描述】:

我正在尝试编写一种方法,将输入的数学表达式拆分为所有单独的运算符和数字。例如,1 + 1 会产生一个 { 1, +, 1 } 的数组,而 2 - -2 会产生一个 { 2, -, -2 } 的数组。在对 StackOverflow 进行了一些研究(使用这个问题:Splitting a simple maths expression with regex)之后,我有点得到了这个工作,我写了以下内容:

String[] t = tokens.split("(?<=[-+*/()])|(?=[-+*/()])");

这适用于 1 + 1,但执行 2 - -2 会产生 { 2, -, -, 2 },这不是我想要的。我对拆分和正则表达式有点陌生,所以这可能是一个基本问题,我只是未能正确研究,但任何帮助将不胜感激!另外,我意识到仅用空格分隔会非常容易,但我真的很想避免这种情况。非常感谢您的帮助!

【问题讨论】:

  • 转义特殊字符是什么意思?

标签: java regex parsing split expression


【解决方案1】:

这如你所愿。

String[] t = "2-2+-2".split("(?=[-+*/()])|(?<=[^-+*/][-+*/])|(?<=[()])");
// ==> {"2", "-", "2", "+", "-2"}

【讨论】:

    【解决方案2】:

    通过将[0-9]+ 添加到正则表达式模式的开头,如下所示:

    String[] t = tokens.split("[0-9]+(?<=[-+*/()])|(?=[-+*/()])");
    

    你强制第一个匹配的表达式在一系列数字之前,而不是在任何东西之前。结果是:

    [2 , - , -2]
    

    这并不完美,但至少你现在有了正确的标记,在你修剪多余的空间之后。

    【讨论】:

    • 这可行,但现在 2 - 2 结果为 { 2, -2 } 而不是 { 2, -, 2}。有没有办法同时做到 2 - -2 和 2 - 2?
    猜你喜欢
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多