1

CSVファイルの仕様は次のとおりです。

  • キー – カテゴリ:ID として構造化されます。ここで、ID はシーケンス番号です。これを 2 つの部分に分割する (または使用する) 必要はありません。キーを単一の一意の値として扱うだけです。
  • ブランド – 製品のメーカー
  • モデル – 製品のモデル名
  • WeightInKg – 最も近い kg に丸められた製品の重量
  • 価格 – 小数点以下 2 桁までの商品の販売価格 (2 dp)

そして、私は各行をトークン化するためにこのコードを持っています:

public WarehouseItem(String warehouseItem) {
  String key, brand, model;
  int weightInKG;
  double price; 
  StringTokenizer strTok;

  strTok = new StringTokenizer(warehouseItem);
  try {
    key = strTok.nextToken();
    brand = strTok.nextToken();
    model = strTok.nextToken();
    weightInKG = Integer.parseInt(strTok.nextToken());
    price = Double.valueOf(strTok.nextToken());
  }
  catch (Exception e) {
    throw new IllegalStateException("CSV row had invalid format");
  }
}

実行しようとすると、CSV ファイルに対して IllegalStateException が発生します。

Exception in thread "main" java.lang.IllegalStateException: CSV row had invalid format
    at WarehouseItem.<init>(WarehouseItem.java:23) // throwing exception
    at main.loadRecords(main.java:63) // records[numRows] = new WarehouseItem(warehouseItem); storing into array of objects
    at main.main(main.java:26) // loadRecords(); calling the function which reads a line
    at main.loadRecords(main.java:78) // main(null); recursing back to main
    at main.main(main.java:26) // loadRecords(); calling the function which reads a line

CSV ファイルの行の例を次に示します。

カウチ:6,Fremarc,Deluxe,101,1871.7

キーがシーケンス番号として ID を持っているためでしょうか?? またはそれはまったく問題ではありませんか?? 私は混乱していて、助けていただければ幸いです

4

2 に答える 2

3

StringTokenizerあなたがやろうとしていることに対して少し重いです(同時に、二重引用符で正確なCSV形式を解析しようとしている場合は十分に複雑ではありません).

より簡単なアプローチはString.split、次のようなメソッドを使用することです。

public WarehouseItem(String warehouseItem) {
    String key, brand, model;
    int weightInKG;
    double price; 
    String[] tok = warehouseItem.split(",");
    if (tok.length != 5) {
        throw new IllegalStateException("Invalid CSV: not enough columns");
    }
    key = tok[0];
    brand = tok[1];
    model = tok[2];
    weightInKG = Integer.parseInt(tok[3]);
    price = Double.valueOf(tok[4]);
    // Do something with the values you've got
    ...
}
于 2013-10-28T03:28:25.837 に答える