这里的Java初学者,我正在尝试将中缀表达式转换为后缀表达式,但我无法理解如何检查StringTokenizer
创建的令牌是否为数字。我尝试了tokens.equals()
方法,但意识到它不会有效,因为数字并不总是 1 位数字。
public String infixToPostfix() {
Stack<String> s = new Stack<>();
String expression = jtfInfix.getText();
String delims = "+-*/() ";
StringTokenizer strToken = new StringTokenizer(expression, delims, true);
String postFix = "";
while (strToken.hasMoreTokens()) {
String token = strToken.nextToken();
// if the next token is a number, append it to the result
if (token!=delims) {
postFix += token;
}
}
}
检查String
是否为数字可能很棘手,因为情况太多了。我不建议自己编写代码,除非你打算接受简单的值,比如正整数(任何数字长度(。要执行此简单检查,您可以使用正则表达式:
token.matches("\d+");
这将匹配一个或多个数字(数字(。
有关更复杂的匹配(如十进制值和负数(,请参阅如何在 Java 中检查字符串是否为数字。
用法示例:
"1".matches("\d+"); // true
"1057".matches("\d+"); // true
"".matches("\d+"); // false
"1.0".matches("\d+"); // false
"-1".matches("\d+"); // false