我正在编写一个从csv文件读取的程序,并将值放入一个对象数组中。所以我设置了一个有5个属性的对象类。我似乎无法得到的是如何将标记化变量放入我的对象数组中。我做了一个system.out.printf,它使用我的对象类中的getter打印出每个索引中的对象实例,但是我得到一个空指针。所以我的猜测是令牌没有存储在我的对象数组中,所以如何才能完成?这是我到目前为止所做的。
编辑:这是我的CSV文件中的一行 12345,左手培根担架,125.95,PGH,2
编辑:这是我得到的那些问题的堆栈跟踪错误 java.lang.NumberFormatException:对于输入字符串:“5” at java.lang.NumberFormatException.forInputString(Unknown Source) 在java.lang.Integer.parseInt(未知来源) 在java.lang.Integer.parseInt(未知来源) 在Prog6.main(Prog6.java:97)
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();
答案 0 :(得分: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]
是否可解析。如果它的值是空字符串(“”),空格或不是数字。
答案 1 :(得分:0)
首先检查你的程序是否在循环中进入,你可以调试或添加打印语句
如果它进去的话,那么检查代币的长度
您的文件少于20条记录也是可以的吗?
还要共享您用于打印每个对象的异常statck跟踪和代码
编辑:
在catch块写System.out.println( "File error " + e.getMessage() );
e.printStackTrace()
的Instean
改为使用:
Integer.parseInt( tokens[4].trim() );
答案 2 :(得分:0)
问题是.csv文件中的一行是这样的:
blah,blah,blah,blah, 5
注意那里的空间,这就是导致NumberFormatException的原因。从.csv中删除此空格,尝试(如Rafa El建议的那样)在解析为整数之前修剪字符串,或尝试拆分以下正则表达式:" *, *"
。