当我尝试将 3 个字符的字符串转换为整数时出现 NumberFormatException
NumberFormatException when I try to convert a 3 character string into integer
"Exception in thread "main" 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:below 是一个最小的可重现示例,它会产生此错误消息
"Exception in thread "main" 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();
}
}
如我所见,您尝试从“l20”通过 Integer.parseInt(key.substring(3,6)) 获取整数;
据我所知 parseInt() 解析整数(数字)。 "l" 是什么数字?)我不知道,Integer 也不知道,这就是它抛出这个异常的原因)
或许可以将您的代码与我的进行比较。我几乎是按照你说的方式做的,只有一点点不同。
$ 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);
}
}
我没发现问题。它似乎工作正常,所以你没有包含一些重要的东西。
我刚刚弄清楚出了什么问题
我没有将 String 键初始化为 "" 所以它默认为 null
它试图转换的子字符串 3-6 以 L
开头
一旦我修复它,错误就消失了
感谢所有帮助过的人
"Exception in thread "main" 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:below 是一个最小的可重现示例,它会产生此错误消息 "Exception in thread "main" 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();
}
}
如我所见,您尝试从“l20”通过 Integer.parseInt(key.substring(3,6)) 获取整数; 据我所知 parseInt() 解析整数(数字)。 "l" 是什么数字?)我不知道,Integer 也不知道,这就是它抛出这个异常的原因)
或许可以将您的代码与我的进行比较。我几乎是按照你说的方式做的,只有一点点不同。
$ 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);
}
}
我没发现问题。它似乎工作正常,所以你没有包含一些重要的东西。
我刚刚弄清楚出了什么问题 我没有将 String 键初始化为 "" 所以它默认为 null 它试图转换的子字符串 3-6 以 L
开头一旦我修复它,错误就消失了
感谢所有帮助过的人