Java – read semicolon delimited CSV
•
Java
I have the following code block, which uses opencsv to read CSV files and store column 7 The problem I face is that I use; As a separator in the CSV file, but it also acts as a separator How can I avoid this?
Unable to place '' in CSV because we got a non editable file from the client
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++;
}
}
Solution
Use overloaded version of opencsv with separator
CSVReader(reader,';')
Update (thanks @ Matt) – better use:
CSVReaderBuilder(reader)
.withCSVParser(CSVParserBuilder()
.withSeparator(';')
.build())
I think the count is a little wrong:
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++;
}
}
Instead, you can do a for loop:
if (nextCsvLine.length > 6) {
detailItems.add(nextCsvLine[6]);
}
The seventh field should have index 6
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
