java:将字符串值转换为int

qzlgjiam  于 2023-06-04  发布在  Java
关注(0)|答案(8)|浏览(277)

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)
kqlmhetl

kqlmhetl1#

表中至少有一个空单元格。
我有个建议

try {
   sum += Integer.parseInt(columnValue);
} catch (NumberFormatException nfe) {
  // the cell is either empty or not an integer number
  // will be treated as zero (0)
}

注意,方法getColumnValue(int i, String name)没有为javax.swing.JTable定义。如果你使用JTable的子类,那么错误也可能在那个类/方法中:它可能返回空字符串而不是单元格值。

3pmvbmvn

3pmvbmvn2#

我猜你需要将一个空的 String 或null值转换为零。
因此,当您获取 String 值时,需要修剪空格,然后检查字符串是否为空。
下面是您的代码应该看起来的样子

final ArrayList<String>ValuesList = new ArrayList<String>();
final int nb = myTable.getRowCount();
int sum=0;
String columnValue = "";

for (int i = 1; i < nb; i++)
{
    columnValue = myTable.getColumnValue(i, columnName).trim();
    if (!columnValue.isEmpty()) {
        sum=sum+Integer.parseInt(columnValue);
    }

    ValuesList.add(columnValue);
}
62o28rlo

62o28rlo3#

在使用parseInst调用转换之前检查null/空字符串。

if (columnValue != null && !columnValue.isEmpty())
    sum=sum+Integer.parseInt(columnValue);

我不确定确切的语法,所以在使用它之前请验证。

6ovsh4lw

6ovsh4lw4#

如果columnValue为空(""),则无法解析它。在这种情况下,只需跳过该列,即。

if( columnValue != null || columnValue.length() > 0 ) {
 //parse and add here
}

请注意,我添加了null检查,以防万一,如果myTable.getColumnValue(...)保证永远不会返回null,您可能不需要它。
还要注意,您也可以尝试处理其他情况,这取决于表中可能包含的值。如果允许像" "这样的空字符串或一般的字母数字值,则还需要考虑这一点。
最后,如果值实际上是数字,为什么要存储为字符串?为什么不立即将它们存储为Integer对象?

2eafrhcq

2eafrhcq5#

如果在你的例子中空字符串意味着0,你可以在之前检查一下:

if (!columnValue.equals(""))
    sum=sum+Integer.parseInt(columnValue);

或者更好:

if(!columnValue.isEmpty())
    sum=sum+Integer.parseInt(columnValue);
vnzz0bqm

vnzz0bqm6#

不能将空字符串转换为int。如果要将其视为0,请添加适当的if语句。

qlfbtfca

qlfbtfca7#

编译器告诉你的是,你正在尝试将一个空字符串""转换为一个int。因此,您可能需要检查您正在转换的字符串是否实际表示整数!

pftdvrlh

pftdvrlh8#

您可以使用Java Optional来实现这一点:

public class NumberUtil {
    
    public static Integer convertBlankOrNull(String string) {
        return Optional.ofNullable(string)
                .map(String::trim)
                .filter(s -> !s.isEmpty())
                .map(Integer::parseInt)
                .orElse(0);
    }
}

相关问题