3

我有一个包含大约 150 个数字的字符串,例如 String num = "64513246563........";

我正在尝试添加此字符串的每个数字。所以我的想法是将它分成一个整数数组并从那里添加它们。我首先将其拆分为 String 数组,然后尝试将其转换为 Int 数组。我收到一个未知来源错误。下面是代码:

String[] strArray = num.split("");
int[] intArray = new int[strArray.length];
        for(int i = 0; i < strArray.length; i++) {
           intArray[i] = Integer.parseInt(strArray[i]);
           } 

这是错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)

谁能看到我做错了什么,或者有更有效的方法吗?

////////////////////////////

感谢大家的帮助,似乎使用 .split("") 拆分字符串会在索引 0 处创建一个空字符串。这是我的主要问题,但有很多有用的指示如何更有效地解决问题 :) 谢谢你们都为您的意见

4

8 回答 8

8

给出的第一个字符串num.split("");是空的。

一个解决方案是简单地从索引 1 开始迭代。

但是你做的事情太贵了

    String num = "64513246563";
    for(int i = 0; i < num.length(); i++) {
         int digit = num.charAt(i)-'0';
         ... // use the digit, perhaps adding it
    } 
于 2012-12-07T16:43:09.593 回答
5
int sum = 0;
for (int i = 0; i < string.length(); i++) {
    sum += Character.getNumericValue(string.charAt(i));
}
于 2012-12-07T16:40:05.083 回答
3
java.lang.NumberFormatException: For input string: ""

异常消息清楚地告诉输入是空字符串。

一种处理方法是,String在解析之前进行空检查。

 for(int i = 0; i < strArray.length(); i++) {
           if(strArray[i] != null && !"".equals(strArray[i])
              {
               int q = Integer.parseInt(strArray[i]);
              }
           } 

注意:如果输入不是有效的 int,这仍然会失败,但在空字符串(或)null 的情况下不会。

处理此问题的另一种方法是 getchartAt(i)而不是使用split("")

于 2012-12-07T16:39:54.353 回答
2
String num="12234";
        String[] numarr = num.split("");
        System.out.println(numarr.length);

当您拆分字符串时,第零个索引处""将有一个空字符串。因此,您的结果数组将是:

{"", "1", "2", "2", "3", "4"}

测试一下,上面返回的长度为6。因此Integer.parseInt("")导致NumberFormatException

测试:

String num="12234";
        String[] numarr = num.split("");
        for(String s: numarr){
            if(s.equals("")){
                System.out.println("empty string");
            }
            else {
                System.out.println(s);
            }

输出:

empty string
1
2
2
3
4

因此,索引 0 处有一个空字符串。

因此,您必须在解析之前检查字符串是否为空字符串:

String[] strArray = num.split("");
int[] intArray = new int[strArray.length];
        for(int i = 0; i < strArray.length; i++) {
           if(!strArray[i].equals(""))
           intArray[i] = Integer.parseInt(strArray[i]);
           } 
于 2012-12-07T16:42:48.550 回答
1
char[] charArray = num.toCharArray();

for(char c : charArray) {
    int q = Integer.parseInt("" + c);
} 
于 2012-12-07T16:43:11.327 回答
0
for(int i=0; i<yourString.length; i++) {
    yourIntegers[i] = Integer.parseInt(yourString.charAt(i).ToString());
}
于 2012-12-07T16:42:35.803 回答
0

我只需沿着字符串走,解析每个数字:

int sum = 0;
for (int i = 0; i < num.length(); ++i) {
    sum += Integer.parseInt(num.substring(i, i + 1));
}
于 2012-12-07T16:43:53.803 回答
0

由于数组从空字符串开始,因此您必须跳过第一个元素,因此i1for 循环中开始。

for(int i = 1; i < strArray.length; i++)
于 2012-12-07T16:47:21.683 回答