0

我正在编写一个从 csv 文件读取并将值放入对象数组的程序。所以我建立了一个有 5 个属性的对象类。我似乎无法得到的是如何将标记化的变量放入我的对象数组中。我做了一个 system.out.printf,它使用我的对象类中的 getter 打印出每个索引中的对象实例,但我得到一个空指针。所以我的猜测是令牌没有存储在我的对象数组中,那么如何做到这一点?这就是我到目前为止所拥有的。

编辑:这是我的 CSV 文件 12345,Left-Handed Bacon Stretcher,125.95,PGH,2 上的其中一行

编辑:这是我为那些询问 java.lang.NumberFormatException: For input string: " 5" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at Prog6.main(Prog6.java:97) 处的 java.lang.Integer.parseInt(Unknown Source)

Part[] part = new Part[20];

String partNumber;
String description;
double price = 0.0;
String warehouseID;
int quantity = 0;

try
{
inFile = new Scanner( new File( "parts.txt" ) );
}
catch( FileNotFoundException e )
{
System.out.println( "Error: File parts.txt not found" );
}

// read file
try
{

while ( inFile.hasNext() )
{
String record = inFile.nextLine();
String[] tokens = record.split(",[ ]*");

partNumber = tokens[0];
description =  tokens[1] ;
price = Double.parseDouble( tokens[2] );
warehouseID =  tokens[3] ;
quantity = Integer.parseInt( tokens[4] );

part[num] = new Part( partNumber, description, price, warehouseID, quantity );
num++;

}
}
catch( Exception e )
{
System.out.println( "File error " + e.getMessage() );
}

// close file
inFile.close();
4

3 回答 3

1

试试这个,看看会发生什么

try
{   
    int row=1;
    while ( inFile.hasNext() )
    {
        String record = inFile.nextLine();
        String[] tokens = record.split(",");
        if(tokens.length==5){
            partNumber = tokens[0];
            description =  tokens[1] ;
            price = Double.parseDouble( tokens[2].trim());
            warehouseID =  tokens[3] ;
            quantity = Integer.parseInt( tokens[4].trim());
            part[num] = new Part( partNumber, description, price, warehouseID, quantity );
            num++;
        }
        else{
            System.out.println("Row "+row+" skipped (record not complete)");
        }
        row++;
    }
}

此外,您需要检查是否tokens[2]tokens[4]解析。如果它的值为空字符串(“”),空格或不是数字。

于 2013-11-01T03:44:03.283 回答
0
  1. 首先检查您的程序是否进入while循环,您可以调试或添加打印语句

  2. 如果它进入内部,则检查令牌的长度

  3. 您的文件是否有可能少于 20 条记录?

还分享您用于打印每个对象的异常 statck 跟踪和代码

编辑:

在catchSystem.out.println( "File error " + e.getMessage() );块中写入e.printStackTrace()

改用这个:

Integer.parseInt( tokens[4].trim() );
于 2013-11-01T03:22:57.187 回答
0

问题是 .csv 文件中的其中一行如下所示:

blah,blah,blah,blah, 5

注意那里的空间,这就是导致 NumberFormatException 的原因。从您的 .csv 中删除此空间,尝试(如 Rafa El 建议)在解析为整数之前修剪字符串,或尝试拆分以下正则表达式:" *, *".

于 2013-11-01T04:06:33.723 回答