请考虑以下代码示例:
private static CSVFormat CSV_FORMAT = CSVFormat.TDF;
logger.debug("Processing record: {}", line);
try {
CSVParser parser = CSVParser.parse(line,CSV_FORMAT);
if(parser.getRecords().isEmpty()) continue;
csvRecord = parser.getRecords().get(0);
} catch (IOException e) {
logger.warn("Skipping line: " + line,e);
continue;
}
由于某种原因,这不是解析。我得到以下输出:
DEBUG: (OrderParser#parseData:121) - Processing record: 136147091 340834429 4/5/2015 4:35:00 PM 262105109 UFH6285 6 0 0 HWF62 Holmes Humidifier Replacement Filter 8.99 53.94 0 39.91 0 8.09 0 5.94 5.12 7035997658 Marty Joe aa3003@mail.com Jess Dude 555 Main st Anywhere CA 900000 1 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
即使您可能无法通过StackOverflow看到这一点,我保证那里有标签。但是,索引越界异常发生在 parser.getRecords().get(0)
如果我拨打parser.getRecordNumber()
,则会报告1
。我不知道这是由于字符编码错误还是由于什么原因造成的。
根据要求,这里有一些样本输入夹在预标签内。这里有两行,但我只是发送了第二行:
SNumber RecD Receip_ID ListingID Date_Entered 234 ReferenceId QT QT2 QT3 Title P456 Product_Rev Sh2687t Product Shipping Comm ShipFee PerItemFee Tax_Cost Company HoneCode Bill455 Bill788 Email Ship468644 Ship6489 Ship654132158 Ship98198 Ship_To_City Ship_To_State Ship_To_Zip ShippingMethodId 2644 7775 11457 26894 4/9/2015 9:47:00 AM 247520128 700364 1 0 0 Shark Navigator 14.99 14.99 0 11.75 0 2.25 0 0.99 0 84698 Shawn Vanloan 3504620ae7f03@mail.com S Vanloo 166 E Main Rd Anywhere NY 12000 1
答案 0 :(得分:2)
根据apidocs,parser.getRecords()
根据给定的格式解析文件并将内容作为列表返回。解析位置将在输入的末尾。因此,parser.getRecords()
的另一个调用将返回一个空列表。
考虑明智地解析输入记录。
答案 1 :(得分:0)
CSVParser parser = ... //Any method for obtaining a parser
for(CSVRecord record : parser) {
//Code for operating on the record here
}