BigInteger - java.lang.NumberFormatException错误?

时间:2013-12-02 10:30:54

标签: java

我有一个字符串,我将该字符串分解为令牌,然后我将令牌转换为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

并且此表达式被标记化,从而导致操作数和运算符

3 个答案:

答案 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检查失败。请在此处发布您的方法。