java:将算术表达式拆分为令牌

java:将算术表达式拆分为令牌,java,string,stringtokenizer,Java,String,Stringtokenizer,如何用空格分隔算术表达式,例如我有这个表达式22+(33*1)我想用空格在同一个字符串中的运算符(返回一个字符串)之间分割它们,就像22+(33*1)一样,通过我使用StringTokenizer的方式这并不容易。您必须解析表达式并 建立一个代币树。你终于表现得像 解析器。然后重新创建表达式并在表达式之间插入空格 每个元素。 尝试搜索解析算术表达式您可以使用多个字符串。replaceAll语句将运算符替换为带空格的运算符。您的规则比您想象的简单。可能正确的java: expr = expr.re

如何用空格分隔算术表达式,例如我有这个表达式22+(33*1)我想用空格在同一个字符串中的运算符(返回一个字符串)之间分割它们,就像22+(33*1)一样,通过我使用StringTokenizer的方式这并不容易。您必须解析表达式并 建立一个代币树。你终于表现得像 解析器。然后重新创建表达式并在表达式之间插入空格 每个元素。

尝试搜索解析算术表达式

您可以使用多个
字符串。replaceAll
语句将运算符替换为带空格的运算符。

您的规则比您想象的简单。可能正确的java:

expr = expr.replaceAll('+', ' + ')
           .replaceAll('-', ' - ')
           .replaceAll(')', ' ) ')
           //etc
           .replaceAll(' ', '  '); //remove any double spaces added.

你尝试过什么吗?是的,我尝试过使用StringTokenizer with,并用“”分隔“”,但结果是2+(3*1)它将每个数字分隔开,我只想像上面所说的那样将每个操作数分隔开一个低效的方法是将每个标记本身替换为一个空格(使用
String.replaceAll
)然后使用正则表达式
\x20+
(使用
string.split
)拆分字符串。又快又脏,但可能符合你的要求。为什么?不管怎样,意思都是一样的。或者这是扫描和解析表达式的一个步骤?在这种情况下,您应该问这个问题,添加空格与此无关。简单地说,我只想将字符串的格式设置为我上面所说的格式,只是为了澄清,您不需要多个
replaceAll
表达式。这可以用一个单独的一个来完成,使用一些正则表达式和替换魔法。一旦他有了树,很难理解为什么他会想要回到一个线性字符串。奇怪的问题。是的,奇怪,动机是遗漏了我没有建立一棵树,我只是用空格分隔每个操作数和运算符,建立一棵树是为了我程序的后期,我只是为树的部分做好准备,简单地说,我只想用一个空格来表示操作数和运算符,基本上它只是字符串而不是任何其他结构插入空格对后面的部分没有帮助。跳过你的问题,从后面的部分开始。我真的希望我能做到这一点,但要求不是这样。如果原始表达式中已经有空格,则不起作用。你会介绍更多的。(之后可能会被删除)这是接近我所做的,虽然不是真正相同的代码,但想法是存在的