我嘗試用java解析csv,並且遇到以下問題:第二列是一個用雙引號括起來的字符串(它也可能包含逗號),除非字符串本身包含一個雙引號,然後整個字符串用單引號括起來。例如解析csv,不要在單引號或雙引號內拆分
行可能lokk這樣的:
someStuff,"hello", someStuff
someStuff,"hello, SO", someStuff
someStuff,'say "hello, world"', someStuff
someStuff,'say "hello, world', someStuff
someStuff對於其他元素,也可以包括在同一樣式
引號我正在尋找一種通用的方法,在分割線的佔位符逗號除非用單引號或雙引號括起來才能將第二列作爲字符串。隨着第二專欄中,我的意思是字段:
- 你好
- 你好,SO
- 說: 「你好,世界」
- 說「你好,世界
我試圖OpenCSV但失敗,因爲人們只能指定一種類型的報價:
public class CSVDemo {
public static void main(String[] args) throws IOException {
CSVDemo demo = new CSVDemo();
demo.process("input.csv");
}
public void process(String fileName) throws IOException {
String file = this.getClass().getClassLoader().getResource(fileName)
.getFile();
CSVReader reader = new CSVReader(new FileReader(file));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
System.out.println(nextLine[0] + " | " + nextLine[1] + " | "
+ nextLine[2]);
}
}
}
與opencsv解決方案失敗的最後一行,其中只有一個雙引號括在單引號:
someStuff | hello | someStuff
someStuff | hello, SO | someStuff
someStuff | 'say "hello, world"' | someStuff
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
你能夠改變的數據? ''說\「你好,世界\」「'應該在opencsv中工作。 –
數據在一個文件中,所以我可以在解析之前更改它,即讀取行,更改/轉義引號然後分割它 –