从 JTable 中,我尝试从[row 1 to ..end of row]中获取每一列的值(字符串),并计算值的总和,如下所示:
final ArrayList<String>ValuesList = new ArrayList<String>();
final int nb = myTable.getRowCount();
int sum=0;
for (int i = 1; i < nb; i++)
{
String columnValue = myTable.getColumnValue(i, columnName);
sum=sum+Integer.parseInt(columnValue);
ValuesList .add(columnValue);
}
但我得到了
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)
8条答案
按热度按时间kqlmhetl1#
表中至少有一个空单元格。
我有个建议
注意,方法
getColumnValue(int i, String name)
没有为javax.swing.JTable
定义。如果你使用JTable
的子类,那么错误也可能在那个类/方法中:它可能返回空字符串而不是单元格值。3pmvbmvn2#
我猜你需要将一个空的 String 或null值转换为零。
因此,当您获取 String 值时,需要修剪空格,然后检查字符串是否为空。
下面是您的代码应该看起来的样子
62o28rlo3#
在使用
parseInst
调用转换之前检查null/空字符串。我不确定确切的语法,所以在使用它之前请验证。
6ovsh4lw4#
如果
columnValue
为空(""
),则无法解析它。在这种情况下,只需跳过该列,即。请注意,我添加了null检查,以防万一,如果
myTable.getColumnValue(...)
保证永远不会返回null,您可能不需要它。还要注意,您也可以尝试处理其他情况,这取决于表中可能包含的值。如果允许像
" "
这样的空字符串或一般的字母数字值,则还需要考虑这一点。最后,如果值实际上是数字,为什么要存储为字符串?为什么不立即将它们存储为
Integer
对象?2eafrhcq5#
如果在你的例子中空字符串意味着0,你可以在之前检查一下:
或者更好:
vnzz0bqm6#
不能将空字符串转换为int。如果要将其视为0,请添加适当的if语句。
qlfbtfca7#
编译器告诉你的是,你正在尝试将一个空字符串
""
转换为一个int
。因此,您可能需要检查您正在转换的字符串是否实际表示整数!pftdvrlh8#
您可以使用Java Optional来实现这一点: