给定一个表达式,例如:
4*x+16-455
我需要能够单独检索令牌。因此,我需要:
4
*
x
+
16
-
455
我不能只使用“nextInt()”,因为它都是一个字符串——我该如何解决这个问题?我考虑过由运营商拆分,然后在两者之间交替,这应该可行,但似乎应该有一种更简单的方法来做到这一点。
给定一个表达式,例如:
4*x+16-455
我需要能够单独检索令牌。因此,我需要:
4
*
x
+
16
-
455
我不能只使用“nextInt()”,因为它都是一个字符串——我该如何解决这个问题?我考虑过由运营商拆分,然后在两者之间交替,这应该可行,但似乎应该有一种更简单的方法来做到这一点。
读取整个字符串并将其拆分为标记的最简单方法。您可以通过正则表达式选择令牌。您的示例可以通过以下正则表达式解析为标记:
String s = "4*x+16-455";
Pattern p = Pattern.compile("([0-9]+|[a-z]+|[*//+//-])");
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group());
}
输出:
4
*
x
+
16
-
455
如果您需要更聪明的拆分器以及许多不同的标记,请考虑修改正则表达式或更好地使用解释器模式以使您的解决方案更具可读性。