【问题标题】:Need help parsing a String for numbers and placing them into an array of ints [duplicate]需要帮助解析数字字符串并将它们放入整数数组中[重复]
【发布时间】:2018-03-15 04:42:23
【问题描述】:
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 位的字符串,它会抛出异常:

线程“主”java.lang.NumberFormatException 中的异常:对于输入 字符串:“12345367899”在 java.lang.NumberFormatException.forInputString(Unknown Source) 在 java.lang.Integer.parseInt(未知来源)在 java.lang.Integer.parseInt(未知来源)在 HugeInteger.parse(HugeInteger.java:9) 在 IntegerTest.main(IntegerTest.java:13)

不确定这意味着什么或如何解决它。谢谢!

【问题讨论】:

  • 因为它不能用int表示
  • 如果 40 是您的 HugeInteger 可以拥有的最大位数,您应该一次取一个数字(单个字符);你不能调用 Integer.parseInt()。
  • 它产生问题的原因在于正在使用的正则表达式,它专门从字符串中选择数字,而不是像您的情况一样,将所有字符串 1234567899 作为令牌的一个条目。而是 1,2,3,....

标签: java


【解决方案1】:

如您所知,int 数据类型是 32-bit 带符号的二进制补码整数和

int 范围是 -2^312^31 - 1-21474836482147483647

我认为您可以使用long 作为64-bit 带符号的二进制补码整数。

【讨论】:

    【解决方案2】:

    我刚刚被告知我必须使用 charAt() 来解析数组。所以是这样的吗?

    public void parse (String str) {
            for (int i = 0; i < str.length(); i++) {
                int x = str.charAt(i);  
                bigArray[i] = x;
            }
        }
    

    【讨论】:

    • 这会对您有所帮助,但您需要确保特定索引处的字符仅是数字,然后您可以继续。 int x = Integer.parseInt(str.charAt(I));
    • @Rizvan parseInt 仅适用于 String 而不适用于 char。你应该去长时间 imo。
    • @Chase 上述方法只会返回字符串 12345367899 中每个字符的 ASCII 值,然后添加到数组中。我想这不是你的要求。
    【解决方案3】:

    您应该使用 long 以防您的输入允许超出 int 范围的数字。

    下面的代码示例:

    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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-01-24
      • 2015-10-20
      • 2012-09-29
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多