我有一个字符串,我将该字符串分解为令牌,然后我将令牌转换为biginteger进行进一步处理。 我收到java.lang.NumberFormatException错误
这是代码段
public void tokenize() {
StringTokenizer st = new StringTokenizer(expr);
while ( st.hasMoreElements() ) {
String val = st.nextElement().toString();
if ( isOperator( val ) ) {
operator.push(val);
}
else {
BigInteger op = new BigInteger(val);
operand.push(op);
}
}
}
表达式的格式是这样的
4 + 5 + 6 / 2 - 8 * 1 * 2
并且此表达式被标记化,从而导致操作数和运算符
答案 0 :(得分:2)
根据isOperator
的定义,它运作良好。
boolean isOperator(String s) {
return s.equals("*") || s.equals("-") || s.equals( "/") || s.equals("+");
}
public void tokenize(String expr) {
StringTokenizer st = new StringTokenizer(expr);
while ( st.hasMoreElements() ) {
String val = st.nextElement().toString();
if ( isOperator( val ) ) {
//operator.push(val);
System.out.println("Val");
System.out.println(val);
}
else {
//operand.push(op);
System.out.println("Operand");
BigInteger op = new BigInteger(val);
System.out.println(op);
}
}
}
您是否使用==
来比较运算符?
答案 1 :(得分:1)
试试这个......
public static void main(String[] args) {
String s = "4 + 5 + 6 / 2 - 8 * 1 * 2";
StringTokenizer tokenizer = new StringTokenizer(s);
while(tokenizer.hasMoreElements()) {
String s2 = (String) tokenizer.nextElement();
if(isArithmaticOp(s2.charAt(0))) {
System.out.println("Op = "+s2);
} else {
BigInteger bigInteger = new BigInteger(s2);
System.out.println("Integer = "+bigInteger);
}
}
}
private static boolean isArithmaticOp(char c) {
return c == '+' || c == '-' || c == '/' || c == '*' || c == '%'
|| c == '^';
}
答案 2 :(得分:0)
你的输入表达式在2和2之间有2个空格 这可能导致将空字符串发送到代码的其他部分,BigInteger会抛出异常。
好的唯一可以为您提供数字格式异常的方法是在操作数上if检查失败。请在此处发布您的方法。