【问题标题】:How can I split a string for mathematical use in Java?如何在 Java 中拆分字符串以供数学使用?
【发布时间】:2013-01-07 23:42:41
【问题描述】:

我最近问了一个类似的问题,但我需要更多帮助。

用户将能够输入一个字符串,例如:

"-5-1/-2"

需要:用+,-,*,/,(,)分隔 和负数应该保持在一起,在这种情况下 -5 和 -2 应该保持在一起。

这是我目前拥有的:

String userStrWithoutSpaces=userStr.replaceAll(" ", "");
String[] tokens = userStrWithoutSpaces.split("(?<=[\\-+*/=()])|(?=[()\\-+*/=])");

除了将负数保持在一起之外,这还有效。

提前致谢。

【问题讨论】:

  • 为什么不使用实际的解析器?
  • 我同意,有一些图书馆和这样的图书馆
  • 你走在正确的轨道上,所以要坚持下去。虽然如果你需要一个快速修复,解析器!!
  • 请注意,大多数算术表达式的解析器(我相信)将减号视为一元运算符,而不是数字的一部分;通常,它会使事情变得更加一致和简单。
  • 如果你想解析这样的数学表达式,正确的方法是使用shunting yard algorithm。使用普通类型的解析器很难做到。

标签: java arrays string math split


【解决方案1】:

试试这个:

String[] tokens = userStrWithoutSpaces.split(
    "(?<=[+*/=()])|((?<=-)(?!\\d))|(?=[()\\-+*/=])");

当连字符后跟数字时,这使用前瞻来不拆分

【讨论】:

    【解决方案2】:

    我会使用JFlex。你需要一个词法分析器,一段代码,它会给你一些输入文本的标记。 JFlex 是词法分析器的生成器。 非常快速和可靠的分析仪。您只指定一个规则,形式类似于正则表达式,非常方便。所有的低级工作都由 JFlex 完成。图片展示了 JFlex 的想法:

    【讨论】:

      【解决方案3】:

      在 Java 中获取算术表达式的结果:

      How to parse a mathematical expression given as a string and return a number?

      在java中解析成它的数字和运算符组件:

      Splitting a simple maths expression with regex

      【讨论】:

        猜你喜欢
        • 2018-07-13
        • 2013-10-12
        • 1970-01-01
        • 2011-03-29
        • 1970-01-01
        相关资源
        最近更新 更多