Java从字符串

时间:2016-06-01 09:36:12

标签: java string substring

我制作了一个Java解释器,用户可以在其中输入如下操作:

$x+23/$y+9*$z

$x , $y, $z是先前定义的变量。

使用另一段代码,我将使用各自的值替换这些变量,然后我想将字符串重新组合在一起。

示例:

$x = 1 $y = 2 $z = 3

所以操作最终会是这样的:

1+23/2+9*3

如果用户可能执行不同长度和顺序的操作,我如何从主String中有效地提取这些变量并将它们重新装入?

1 个答案:

答案 0 :(得分:2)

我认为你应该完全解析你的输入字符串,将它分成有意义的标记,而不应该依赖于例如搜索和替换点。

搜索和替换不考虑整个上下文,因此即使存在语法错误或多字符变量名称 - 它也会盲目地替换部分用户输入数据。例如。考虑到您的用户已经定义了一个名为' e'然后他用指数格式写一个数字,如:1e-2(0.01)。显然,' e'在数字中不应被视为上述变量' e'在这方面。

所以要使它有序:为自己定义你的令牌是什么。在我看来他们是:

  1. 浮点数(如果您不想考虑用户提供的表达式的类型,则可以将整数视为特殊情况)。想想你是否也想接受数字的指数格式(例如,1e-2为0.01)
  2. 运营商:+,*,/(和其他人?)
  3. 变量名称(以$开头,也许是多字符?可能是case-(in)敏感?)
  4. 定义标记后,定义语法。例如。在所谓的波兰记谱法写作" 2 3 +"是" 2 + 3" (波兰表示法很容易使用堆栈来评估表达式,它使您无需分析括号和操作员的不同优先级)。

    然后解析用户输入以提取令牌并根据您的语法分析它们之间的关系。否则,您将收到很多针对您的程序无法正常运行的极端情况,包括您将无法分隔的用户拼写错误(在这种情况下,您应该提供语法错误'消息。