有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要帮助解析字符串中的数字,并将它们放入整数数组中

public class HugeInteger {
    private final int SIZE = 40;
    private int[] bigArray = new int[SIZE];

    public void parse (String str) {
        String[] s = str.split("\\D+");
        for (int i = 0; i < s.length; i++) {
            bigArray[i] = Integer.parseInt(s[i]);
        }
    }

    public void printArray() {
        for (int i = 0; i < SIZE; i++) {
            System.out.print(bigArray[i]);
        }
    }
}

public class IntegerTest {

    public static void main(String[] args) {
        String userStr = "";
        Scanner input = new Scanner(System.in);

        System.out.print("Enter first HugeInteger: ");
        userStr = input.nextLine();

        HugeInteger big = new HugeInteger();
        big.parse(userStr);
        big.printArray();
    }
}

基本上,如果我输入一个长度超过10位的字符串,它会抛出异常,并说:

Exception in thread "main" java.lang.NumberFormatException: For input string: "12345367899" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at HugeInteger.parse(HugeInteger.java:9) at IntegerTest.main(IntegerTest.java:13)

不知道这意味着什么,也不知道如何修复。谢谢


共 (2) 个答案

  1. # 1 楼答案

    正如您所知,int数据类型是一个32-bit有符号二的补码整数,并且

    int range is -2^31 to 2^31 - 1 i.e. -2147483648 to 2147483647

    我想你可以用long作为64-bit符号二的补码整数

  2. # 2 楼答案

    如果输入的数字超出了int的范围,则应使用long

    代码示例如下:

    class HugeInteger {
        private final int SIZE = 40;
        private long[] bigArray = new long[SIZE];
    
        public void parse (String str) {
            String[] s = str.split("\\D+");
            for (int i = 0; i < s.length; i++) {
                String x = s[i];
                bigArray[i] = Long.parseLong(x);
            }
        }
    
        public void printArray() {
            for (int i = 0; i < SIZE; i++) {
                System.out.print(bigArray[i]);
            }
        }
    }
    
    public class IntegerTest {
    
        public static void main(String[] args) {
            String userStr = "";
            Scanner input = new Scanner(System.in);
    
            System.out.print("Enter first HugeInteger: ");
            userStr = input.nextLine();
    
            HugeInteger big = new HugeInteger();
            big.parse(userStr);
            big.printArray();
        }
    }