【发布时间】:2016-01-13 03:33:29
【问题描述】:
更新:抱歉误导了你们,这里有更详细的代码:
我正在尝试将 String[] 数组解析为 int[] 数组。我从JTextArea 获取字符串,生成String[],然后生成int[]。
array1String="asd, lala, 22";
array2String="1,2,3";
String [] arr1 = array1String.split(",");
String [] arr2 = array2String.split(",");
int[] array1 = new int[arr1.length];
for (int i=0; i<arr1.length; i++) {
try {
array1[i] = Integer.parseInt(arr1[i]);
} catch (Exception ex) {
resultLabel.setText(ex.getMessage());
}
}
int[] array2 = new int[arr2.length];
for (int i=0; i<arr2.length; i++) {
try {
array2[i] = Integer.parseInt(arr2[i]);
} catch (Exception ex) {
resultLabel.setText(ex.getMessage());
}
}
parseInt() 方法将任何乱码解释为“0”。因此,我没有得到异常,而是将与乱码 String[] 成员对应的每个 int[] 成员都设为零。但这不是我想要的。我想捕获异常以将消息传递给 JLabel。我不希望它愉快地吃任何废话并使其“0”。我错过了什么吗?我怀疑这不是应该的工作方式。
结果数组看起来像
array1 [0,0,22]
array2 [1,2,3].
标签什么也没有,好像从未发生过异常。由于我没有更改代码,只处理了更改的异常。
【问题讨论】:
-
旁注:你不应该在你的 catch 子句中真正捕捉到
Exception,而是NumberFormatException,这是你在这种情况下的预期异常。 -
parseInt()方法将任何“乱码”解释为 0 是什么意思?那不是真的。如果输入String包含除数字以外的任何内容(第一个字符为负号除外),它将抛出NumberFormatException。 -
@Emptyfruit 澄清了很多。虽然现在这给您留下了一个逻辑问题:
int的默认值是 0,但int没有undefined-值。最简单的解决方案:使用Integer[]代替int[]并使用null作为未定义值 -
@Emptyfruit 最简单的方法是打印到消息,然后调用
System.exit(0)以完全终止应用程序。虽然这也会关闭UI。这在很大程度上取决于您要如何终止程序以及程序本身的工作方式。如果您只想停止解析,只需在打印消息后添加return-statement
标签: java exception-handling numberformatexception