我正在Java中做一个简单的LISP解释器,我一直无法弄清楚如何正确分割用户的输入,以便每个字符都在单独的索引上,除了多位数字和可能的单词。我也需要摆脱那种会带来其他问题的白色空间。如何将一个字符串拆分为一个数组,但将多个数字/单词保存在一起?
现在,我使用用户的输入拆分成一个字符串,以计算行是:
String[] mainFunc = equation.replaceAll("\\s+", "").split("(?!^)");
Input: (+ 4 3)
Output:
0) (
1) +
2) 4
3) 3
4))
这个工作对我需要什么,直到2个或多个数字,因为它会分裂他们成为单独的索引。然后我尝试另一个正则表达式,我发现这里几乎花了我需要的照顾,这就是:
String[] mainFunc = equation.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
Input: (- 10 3)
Output:
0) (-
1) 10
2)
3) 3
4))
这几乎是摸索出适合我,但后来我需要拆分第一个括号和运营商,以及摆脱那个空白区域(我试图在循环中修剪,因为某些原因我无法摆脱索引2中的空间)。
关于如何去做这件事的最佳方式的任何想法?
非常感谢你,这正是我所需要的! – reekah
@reekah我修改了正则表达式更一般的,例如处理其他操作符等 – Bohemian