我有以下代码块,它使用OpenCSV读取CSV文件并存储第7列。我面临的问题是我在CSV文件中使用;
作为分隔符,但它也需要,
作为分隔符。我怎么能避免这个?
无法在CSV中输入“”,因为我们从客户端获取了不可编辑的文件。
CSVReader reader = null;
String[] nextCsvLine = new String[50];
String splitBy = ";";
int count = 0;
try {
StringReader sr = new StringReader(new String(in, offset, len));
reader = new CSVReader(sr);
while ((nextCsvLine = reader.readNext()) != null) {
for (String linewithsemicolon : nextCsvLine) {
log.debug("Line read : "+linewithsemicolon);
String[] b = linewithsemicolon.split(splitBy);
if (count==0){
count++;
continue;
}
else {
detailItems.add(b[7]);
log.debug("7th position: "+b[7]);
count++;
}
}
答案 0 :(得分:7)
将重载版本与OpenCSV
的分隔符一起使用CSVReader(reader, ';')
更新(感谢@Matt) - 更好地使用:
CSVReaderBuilder(reader)
.withCSVParser(CSVParserBuilder()
.withSeparator(';')
.build())
我认为count
有点错误:
try (CSVReader reader = new CSVReader(sr, ';')) {
String[] nextCsvLine;
while ((nextCsvLine = reader.readNext()) != null) {
int count = 0;
for (String field: nextCsvLine) {
log.debug("Line read : "+linewithsemicolon);
if (count == 6) { // 7th column
detailItems.add(field);
log.debug("7th position: " + field);
}
count++;
}
}
相反,你可以做的for循环:
if (nextCsvLine.length > 6) {
detailItems.add(nextCsvLine[6]);
}
第七个字段应该有索引6。