【问题标题】:Exception in thread "main" java.lang.NumberFormatException:For input string: on Intellij IDEA线程“主”java.lang.NumberFormatException 中的异常:对于输入字符串:在 Intellij IDEA 上
【发布时间】:2020-10-12 03:54:28
【问题描述】:
int[] a = new int[3];

        String s = e.nextLine();
        String[] sa = s.split(" ");
        for (int i = 0;i<sa.length;i++){
            a[i]=Integer.parseInt(sa[i]);
        }

我找不到任何问题。收到此错误...

线程“main”java.lang.NumberFormatException 中的异常:对于输入 字符串:“”在 java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68) 在 java.base/java.lang.Integer.parseInt(Integer.java:662) 在 java.base/java.lang.Integer.parseInt(Integer.java:770) 在 Team.main(Team.java:23)

我认为我的 Intellij IDEA 遇到了一些问题。如果IDE不能正常工作,会出现这个错误吗?

【问题讨论】:

  • 一个空字符串不是一个有效的数值,这就是整个问题。这和你的 IDE 一点关系都没有
  • 这是一个字符串数组......“sa”我已经打印了数组以查看它的工作与否以及它的工作......它正在打印一个数组
  • 是的,但其中一个元素是一个空字符串。当您尝试将其解析为数值时,就会出现该错误
  • 感谢您的建议,但我不这么认为...... split(" ") 忽略了所有空字符串/空格......不是吗?
  • 没有。它不会忽略它,它会将空字符串作为元素添加到结果数组中

标签: java


【解决方案1】:

问题是您的字符串一个接一个地有两个或多个空格,因此当您执行 split(" ") 时,它会在这些空格之间返回空字符串。

在尝试转换为整数之前,您必须删除空字符串。 您可以使用 if 语句来做到这一点:

int j = 0;
for (int i = 0;i<sa.length;i++){
     if(!sa[i].isEmpty()){
            a[j]=Integer.parseInt(sa[i]);
            j++;
     }
}

【讨论】:

  • 这种方法有风险,您可能会丢失您提供的数字
  • 不,因为这样你只会过滤掉空字符串,所以不会丢失任何数字
  • 嗯,是的,你知道。 a 的长度被硬编码为 3,但是“4 7 4”被“”分割,这给出了什么?记住,你可能认为你跳过了非数值,但那是目标数组中保持为空的位置。
  • 这个例子不会造成任何麻烦,因为 sa[i]=["4","7","4"] 所以它会正确地转换它们。问题在于像“4__7_4”这样的东西,在 4 和 7 之间有两个空格,因此有效地会导致引发 IndexOutOfbounds 异常。不必使用相同的索引来迭代“sa”和“a”数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多