我有一个.csv文件,其中包含逗号以及双引号分隔值。
现在我要解析逗号分隔值,当双引号中有值时,我希望扫描程序使用双引号作为分隔符。
解析行示例:
123,学生,“考试通知”,“模式应该相同,有效,正确”现在我想解析它:
123 //comma seperated
student
exam notification //when "" it should be double quote separated
pattern should be same,validated,proper //ignore , comma in double quotes
我试过的代码:
scanner.useDelimiter(",|\"");
因此它可以同时使用两者,并且“”它表现不错,但在它之间打印空白行,“打击并且也不能忽略双引号之间的逗号。
知道怎么排序吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
使用像OpenCSV这样的CSV解析器来处理引用元素中的逗号,自动跨越多行等的值。您也可以使用该库将文本序列化为CSV格式。
CSVReader reader = new CSVReader(new FileReader("file.csv"));
String [] nextLine;
// prints the following for the line in your question
while ((nextLine = reader.readNext()) != null) {
System.out.println(nextLine[0]); // 123
System.out.println(nextLine[1]); // student
System.out.println(nextLine[2]); // exam notification
System.out.println(nextLine[3]); // pattern should be same,validated,proper
}
答案 2 :(得分:0)
有几种方法可以实现您的目标,
1。)使用支持解析CSV的现有库,如Ravi Thapliyal和它建议的Oibaf。
2.。)您可以提供您的方法
a). if every line in your CSV have a uniform format like :
line 1 : 123,student,"exam notif","word , word , word"
line 2 : 45345,not student,"no exam notif","word,word,word"
you can say like
while(scan.hasNextLine()){
String line = scan.nextLine();
//split it using double quotes first
temp = line.split("\"");
//then just remove commas outside the double quoted objects
for(int x = 0; x<temp.length; x++){
if(temp[x].startsWith(",")) {temp[x] = temp[x].substring(1,temp[x].length()); }
if(temp[x].endsWith(",")) {temp[x] = temp[x].substring(0,temp[x].length()-1); }
}
就这个程序员而言,Java没有任何现有的类,多个分隔符的方法,但是有一些库可以让你的生活更轻松 ,但您总是可以选择提供自己的方法。 Gud运气