0

csv ファイルから読み取り、値をオブジェクトの配列に入れるプログラムを作成しています。そこで、5 つの属性を持つオブジェクト クラスを設定しました。得られないように見えるのは、トークン化された変数をオブジェクトの配列に入れる方法です。オブジェクト クラスのゲッターを使用して各インデックスのオブジェクト インスタンスを出力する system.out.printf を実行しましたが、null ポインターが返されます。だから私の推測では、トークンがオブジェクトの配列に格納されていないので、どうすればこれを行うことができますか? これは私がこれまでに持っているものです。

編集: これは私の CSV ファイル 12345,Left-Handed Bacon Stretcher,125.95,PGH,2 の行の 1 つです。

編集: これは java.lang.NumberFormatException: For input string: " 5" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.NumberFormatException: For input string: " 5" を求める人のために取得するスタック トレース エラーです。 Prog6.main (Prog6.java:97) の java.lang.Integer.parseInt (不明なソース)

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

0
  1. まず、プログラムが while ループ内に入るかどうかを確認します。デバッグするか、print ステートメントを追加できます。

  2. 中に入る場合は、トークンの長さを確認してください

  3. また、ファイルのレコード数が 20 未満である可能性はありますか?

また、各オブジェクトを印刷するために使用する例外 statck トレースとコードを共有してください

編集:

System.out.println( "File error " + e.getMessage() );キャッチブロック書き込みのインスタンスe.printStackTrace()

代わりにこれを使用してください:

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

問題は、.csv ファイルの行の 1 つが次のようになっていることです。

blah,blah,blah,blah, 5

そこにあるスペースに注意してください。これが NumberFormatException の原因です。このスペースを .csv から削除し、(Rafa El が示唆するように) 整数に解析する前に文字列をトリミングするか、次の正規表現で分割してみてください: " *, *".

于 2013-11-01T04:06:33.723 に答える