我有通过 FileReader 读取的 CSV 文件。readLine 会给我 CSV 文件的第一行作为字符串。
字符串 str = 1,1,1,"12345",姓名,"猫,狗";
现在逗号(,)是我的分隔符,如果我拆分字符串,它会给我输出
1 1 12345 名字“猫狗”
但不是这个输出,我希望如果“”(双引号)中有一些值;在这种情况下,它应该取完整值(不拆分)
1 1 12345 名字猫,狗
尝试这个。
public static void main(String[] args) {
String s = "Sachin,,M,\"Maths,Science,English\",Need to improve in these subjects.";
String[] splitted = s.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)");
System.out.println(Arrays.toString(splitted));
}
输出:[Sachin, , M, "Maths,Science,English", 这些科目需要提高。]
例如
分裂[0] =萨钦
拆分 [1] = (空字符串)
分裂[2] = M
splitted[3] = "数学、科学、英语"
splitted[4] = 这些科目需要改进。
无需检查 \ 是否存在。我们正在使用这个正则表达式来拆分 csv 。
试试这个:
String line = "1,1,1,\"12345\",Name,\"Cat,Dog\"";
if (line.contains("\"")) {
line = line.replaceAll("(\"\\,|\\,\")|\\,|\"$", " ");
System.out.println(line);
}else {
// code to split the line
}
输出 :1 1 1 12345 Name Cat Dog