将String解析为Int时的NumberFormatException

时间:2014-08-06 08:37:17

标签: java numberformatexception parseint

我正在编写代码来获取用户输入的多项式的系数和指数。例如,我在控制台中输入“-3x ^ 4 + 2x ^ 3 + 1x ^ 2-1x ^ 1 + 8x ^ 0”。我一直收到这个错误:

Exception in thread "main" 

java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at polynomials.Driver.main(Driver.java:31)

然而,当我输入没有任何负数的多项式时(例如:“3x ^ 4 + 2x ^ 3 + 1x ^ 2 + 1x ^ 1 + 8x ^ 0”),没有错误。我相信错误是以某种方式来自Integer.parseInt(str2),但它不应该能够解析负整数吗?这对我来说毫无意义,我在其他地方找不到任何东西......任何帮助都会有很大的帮助。谢谢大家!

public static void main(String[] args) {

    Scanner userInput = new Scanner(System.in);
    System.out.println("Enter a polynomial: ");

    String polynomial = userInput.nextLine();

    String newPoly = polynomial.replace("-", "+-").trim();

    String[] arr = newPoly.split("\\+");

    for (int i = 0; i<arr.length; i++) {
        System.out.println(arr[i]);

        String str = arr[i].trim();
        String[] arr2 = str.split("x");

        String str2 = arr2[0];

        System.out.println(str2); //prints coefficient
        System.out.println(str.substring(str.indexOf('^')+1)); //prints exponent
        System.out.println(Integer.parseInt(str2));
    }
}

2 个答案:

答案 0 :(得分:2)

此处您的输入字符串为-3x^4+2x^3+1x^2-1x^1+8x^0,后续行将转换为+-3x^4+2x^3+1x^2-1x^1+8x^0

String newPoly = polynomial.replace("-", "+-").trim();

因此,当您尝试使用+作为分隔符将其拆分时,第一个值将生成为&#34;&#34;输入字符串导致异常。

只需在for循环中添加一个if条件就可以了

for (int i = 0; i<arr.length; i++) {
    if(arr[i].length()>0){
        System.out.println(arr[i]);

        String str = arr[i].trim();
        String[] arr2 = str.split("x");

        String str2 = arr2[0];

        System.out.println(str2); //prints coefficient
        System.out.println(str.substring(str.indexOf('^')+1)); //prints exponent
        System.out.println(Integer.parseInt(str2));
    }
}

答案 1 :(得分:0)

不要那样预处理。您可以为.split()参数使用一些智能正则表达式:

{

    Scanner userInput = new Scanner(System.in);
    System.out.println("Enter a polynomial: ");

    String polynomial = userInput.nextLine();

    String[] arr = polynomial.split("\\+|(?=-)");

}

然后你必须删除生成的String[]中的空字符串。别担心,你可以修改for循环,它更容易:

for (int i = ("".equals(arr[0]) ? 1 : 0); i < arr.length; i++)

这样,数组的第一个元素中的空字符串将被忽略,如果它在那里。