【问题标题】:How can i fix it java.lang.NumberFormatException我该如何修复它 java.lang.NumberFormatException
【发布时间】:2021-08-10 16:44:37
【问题描述】:
public class Ip_to_uint32 {

    public static int main(String ip) {
        String[] x = ip.split("[.]");
        StringBuilder binary = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            binary.append(binaryform(Integer.parseInt(x[i])));
        }
        String correct = binary.toString();
        int n = Integer.parseInt(correct);
        return n;
    }

    public static String binaryform(int in) {
        String binary = Integer.toBinaryString(in);
        if (binary.length() != 8){
            StringBuilder correctLegth = new StringBuilder();
            int difference = 8 - binary.length();
            for (int i = 0; i < difference; i++){
                correctLegth.append("0");
            }
            return String.valueOf(correctLegth.append(binary));
        }
        return binary;
    }

它给了我这个错误:

at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)

at java.base/java.lang.Integer.parseInt(Integer.java:652)

at java.base/java.lang.Integer.parseInt(Integer.java:770)

at it.edu.itiszuccante.Ip_to_uint32.main(Ip_to_uint32.java:14)

at it.edu.itiszuccante.Ip_to_uint32Test.main(Ip_to_uint32Test.java:12)```

无法将字符串转换为数字,有人可以帮我吗??

(根据作者的评论添加:)

java.lang.NumberFormatException: For input string: "10000000001000000000101000000001" under radix 2

【问题讨论】:

  • 看起来你有一个 ip 地址传递给 main 但不确定。告诉我们你到底在传递什么。这将有助于理解您传递的输入...
  • 请显示完整的堆栈跟踪,而不是以at开头的行
  • 您可以使用调试器实际查看为变量设置了哪些值。这可能会为您提供线索。
  • 你可能想指定你正在解析一个无符号整数,并且输入是基数 2: int n = Integer.parseUnsignedInt(correct, 2);
  • @Andy java.lang.NumberFormatException:对于输入字符串:基数 2 下的“10000000001000000000101000000001”

标签: java parsing numberformatexception parseint


【解决方案1】:

int 的有效范围是从 -0b10000000_00000000_00000000_000000000b1111111_11111111_11111111_11111111,但要解析的字符串是 "10000000001000000000101000000001"(一个额外的位 - 符号位)。
这作为无符号 int 是有效的,不是 Java 中的原始类型,但可以使用以下方法对其进行解析:

Integer.parseUnsignedInt(correct, 2)

(也可以将其解析为long 并转换(转换)为int
(Java 中没有 unsigned int,所有以128 或更大开头的 IP 都将导致负的int。)

【讨论】:

    【解决方案2】:

    在将字符串转换为数字之前添加额外的验证以检查字符串是否为数字(如 NAN)以避免异常

    【讨论】:

    • 是的,它不把它当作一个数字,但我确定它是一个数字,这就是问题所在
    猜你喜欢
    • 2017-08-27
    • 2022-11-15
    相关资源
    最近更新 更多