【问题标题】:Java string to IntJava 字符串到 Int
【发布时间】:2012-11-25 21:00:55
【问题描述】:

我有一个包含大约 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 处创建一个空字符串。这是我的主要问题,但是对于如何更有效地解决问题有很多有用的指示:) 谢谢大家的意见

【问题讨论】:

  • 在循环的每次迭代中打印 strArray[i] 并查看它打印的内容

标签: java arrays string int


【解决方案1】:

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
    } 

【讨论】:

  • +1 说明了为什么要以空字符串开头。
  • 没错,我不确定我是如何得到一个空字符串的。 +1 并感谢您的解释。
  • @shanahobo86 如果这不仅仅是为了学习,我强烈建议您不要构建中间数组和解析的所有字符串。这真是浪费。
【解决方案2】:
int sum = 0;
for (int i = 0; i < string.length(); i++) {
    sum += Character.getNumericValue(string.charAt(i));
}

【讨论】:

  • 你需要num.length() 而不是num.length
  • 你改得很快 :P 但你先写了Integer.parseInt(num.charAt(i))
  • @MartijnCourteaux 我在发送答案时就知道了,所以我立即更改了它:)
  • 感谢 Tomas,这是我最终用来解决问题的方法 :)
【解决方案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 的情况下不会。

另一种处理方法是获取chartAt(i) 而不是使用split("")

【讨论】:

  • 非常感谢您的帮助。我不确定 String 怎么可能是空的,但这肯定可以解决这个问题。非常感谢。
  • @shanahobo86 你可以从 1 开始而不是 0 检查我的答案。
  • @shanahobo86 请注意,使用这种方法,您的数组中的第 0 个元素将有一个 0。
【解决方案4】:
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]);
           } 

【讨论】:

  • 感谢您的详细解释。我不会再犯同样的错误了:) +1
【解决方案5】:
char[] charArray = num.toCharArray();

for(char c : charArray) {
    int q = Integer.parseInt("" + c);
} 

【讨论】:

    【解决方案6】:
    for(int i=0; i<yourString.length; i++) {
        yourIntegers[i] = Integer.parseInt(yourString.charAt(i).ToString());
    }
    

    【讨论】:

      【解决方案7】:

      我会简单地沿着字符串前进,解析每个数字:

      int sum = 0;
      for (int i = 0; i < num.length(); ++i) {
          sum += Integer.parseInt(num.substring(i, i + 1));
      }
      

      【讨论】:

        【解决方案8】:

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

        for(int i = 1; i < strArray.length; i++)
        

        【讨论】:

        • 一个理由可以改善这个答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-27
        • 2013-02-01
        • 2014-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多