解析单个CSV行

Jad*_*ida 0 java csv

我有一个CSV文件的规范:

  • 密钥 - 结构化为类别:ID,其中ID是序列号.不需要(或使用)将其拆分为两部分,只需将密钥视为单个唯一值即可
  • 品牌 - 产品的制造商
  • 型号 - 产品的型号名称
  • WeightInKg - 产品重量,四舍五入到最接近的千克
  • 价格 - 产品售价至小数点后两位(2dp)

我有这个代码来标记每一行:

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");
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,我得到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
Run Code Online (Sandbox Code Playgroud)

下面是CSV文件中一行的示例:

沙发:6,Fremarc,豪华,101,1871.7

我想也许是因为键有ID作为序列号?或者这根本不重要?我很困惑,任何帮助将不胜感激

Kon*_*ong 7

你可能最喜欢图书馆.解析CSV可能会非常棘手.看看OpenCSV:

http://opencsv.sourceforge.net/

CSVParser parser = new CSVParser();
String[] fields = parser.parseLine(line);
Run Code Online (Sandbox Code Playgroud)