【问题标题】:Parse calculations tokens解析计算令牌
【发布时间】:2011-01-11 17:42:11
【问题描述】:

我有一个字符串,比如“5+30”,我需要将其解析为标记 5,30,+。我怎么做?可以用任何算术运算符代替“+”吗?我认为正则表达式会做,但我不喜欢它们。非常感谢您的帮助。

【问题讨论】:

标签: java


【解决方案1】:

我假设您正在尝试编写某种算术处理器,所以我建议您使用像 ANTLR 这样的解析器生成器。它有一个关于编写算术语法的教程。

解析器生成器非常通用,因此对您的项目来说可能有点过头了,但仍然值得一看。了解如何(更重要的是,何时)使用解析器生成器总是很有用的。

【讨论】:

    【解决方案2】:

    这是一个使用Scanner 类的示例:

    Scanner s = new Scanner("53+12-1+12");
    String token;
    while (null != (token = s.findInLine("\\d+|[+-]")))
        System.out.println(token);
    

    输出:(ideone.com demo)

    53
    +
    12
    -
    1
    +
    12
    

    但是请注意,如果您尝试评估表达式,这将提供有限的帮助,因为您仍然需要注意运算符优先级和可能的括号.我建议您为此类任务使用适当的解析器生成器。

    【讨论】:

    【解决方案3】:

    通常您会使用扫描仪。这是一个用 java 编写的扫描仪示例:http://download.oracle.com/javase/tutorial/essential/io/scanning.html

    您也可以使用 java.util.Scanner - 这是教程: http://www.java-tips.org/java-se-tips/java.util/scanning-text-with-java.util.scanner-3.html

    【讨论】:

      【解决方案4】:

      应该为您工作的正则表达式是:

      [0-9]+|[^0-9]+
      

      您将使用 java String match 或 Matcher 类为您完成工作

      您可以将 [^0-9]+ 部分替换为您想要支持的一组运算符,例如:

      [0-9]+|[+-/*]
      

      【讨论】:

        【解决方案5】:

        您可以查看pattern 以获得良好的文档。 您的字符串将对应于[0-9]+\p{Punct}{1}[0-9]+ 文档开头有示例说明如何使用它

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-21
          • 1970-01-01
          • 2023-04-07
          • 1970-01-01
          • 1970-01-01
          • 2011-05-13
          • 2015-07-19
          相关资源
          最近更新 更多