当我尝试将3个字符串转换为整数时出现NumberFormatException

时间:2019-10-15 20:14:58

标签: java numbers integer numberformatexception

“线程“主”中的异常java.lang.NumberFormatException:对于输入字符串:“ l20””

这是我收到的错误消息,因为我试图将3位数字的字符串类型转换为int。

如果我正确理解java中int的最大值是2147483647?

这是引起语法的方法

private int getRed(String key) {
    return Integer.parseInt(key.substring(3,6));
}

编辑:为清楚起见,密钥是由以下代码随机生成的12位字符串

for(int i=0;i<12;i++) {
      Random random = new Random();
      key=key+Integer.toString(random.nextInt(10));
}

编辑2:下面是一个最小的可重现示例,它会产生此错误消息 “线程“主”中的异常” java.lang.NumberFormatException:对于输入字符串:“ l35”     在java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)     在java.lang.Integer.parseInt(Integer.java:580)     在java.lang.Integer.parseInt(Integer.java:615)     在Test.getRed(Test.java:57)     在Test.getKey(Test.java:44)     在Test.encode(Test.java:36)     在Test.main(Test.java:70)”

public class Test {
    String key; 
    public Test() {
        for(int i=0;i<12;i++) {
            Random random = new Random();
            key=key+Integer.toString(random.nextInt(10));
        }
    }

    public void encode() {
        for(int i=0; i<5;i++) {
            int key=getKey(i);
        }
    }
    private int getKey(int i) {
        int indicator = i%3;
        int returnInt=0;
        switch (indicator) {
        case 0:
            returnInt=getRed(key);
            break;
        case 1:
            returnInt=getGreen(key);
            break;
        case 2:
            returnInt=getBlue(key);
            break;
        }
        return returnInt;
    }

    private int getRed(String key) {
        return Integer.parseInt(key.substring(3,6));
    }

    private int getGreen(String key) {
        return Integer.parseInt(key.substring(6,9));
    }

    private int getBlue(String key) {
        return Integer.parseInt(key.substring(9,11));
    }

    public static void main(String args[]) {    
        Test test=new Test();
        test.encode();
    }
}


4 个答案:

答案 0 :(得分:1)

也许将您的代码与我的代码进行比较。我几乎按照您说的做,只有一点点差异。

$ javac Num.java && java Num
Full key: 255142125179
Parsing: 142
Parsed: 142
$ cat Num.java
import java.util.Random;

public class Num {
    public static int getRed(String key) {
        System.out.printf("Parsing: %s\n", key.substring(3, 6));
        return Integer.parseInt(key.substring(3,6));
    }

    public static void main(String[] args) {
        String key = new String("");
        Random random = new Random();

        for (int index = 0; index < 12; ++index) {
            key = key + Integer.toString(random.nextInt(10));
        }

        System.out.printf("Full key: %s\n", key);
        int value = getRed(key);
        System.out.printf("Parsed: %d\n", value);
    }

}

我没看到问题。它似乎工作正常,所以您没有包含任何重要内容。

答案 1 :(得分:0)

使用调试器或将System.out.println放入方法getRed(String key)内以检查key.substring(3,6)的值。您收到的异常是因为key.substring(3,6)没有返回数字。

private int getRed(String key) {
    System.out.println(key.substring(3,6));
    return Integer.parseInt(key.substring(3,6));
}

答案 2 :(得分:0)

正如我所见,您尝试从“ l 20”通过Integer.parseInt(key.substring(3,6))获得整数。 据我所知parseInt()解析整数(数字)。什么是“ l”?)我不知道,而Integer也不知道,这就是它引发此异常的原因)

答案 3 :(得分:0)

我只是想出了什么问题 我没有将String键初始化为“”,因此默认为null 并尝试将其转换为3-6的子字符串,

一旦我修复了错误,就消失了

谢谢大家的帮助