我正在使用scanner.delimiter 来拆分我的csv,分隔符是“,”。但是,我有一些数据在数据中包含逗号,例如“Monsters, Inc.”。
但是,如果我将分隔符设置为“\”,\“”,那么它会在其他所有内容上崩溃。
不需要我编写自己的scanner.delimiter 方法的想法?
我正在使用scanner.delimiter 来拆分我的csv,分隔符是“,”。但是,我有一些数据在数据中包含逗号,例如“Monsters, Inc.”。
但是,如果我将分隔符设置为“\”,\“”,那么它会在其他所有内容上崩溃。
不需要我编写自己的scanner.delimiter 方法的想法?
我认为scanner.delimiter 不适用于此类问题。如果您在存在额外逗号的数据中有引号,则可以使用正则表达式或代码来解决此类问题,也可以使用类似答案/问题中提到的 String.split。如果你没有报价,那么你真的无能为力。
stackoverflow上有类似的例子。例如,我认为这适用于您:
使用 String.split() 将带有引号的 csv 文件拆分为文本分隔符
使用拆分
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));
}
使用自定义代码
public static ArrayList<String> customSplitSpecific(String s)
{
ArrayList<String> words = new ArrayList<String>();
boolean notInsideComma = true;
int start =0, end=0;
for(int i=0; i<s.length()-1; i++)
{
if(s.charAt(i)==',' && notInsideComma)
{
words.add(s.substring(start,i));
start = i+1;
}
else if(s.charAt(i)=='"')
notInsideComma=!notInsideComma;
}
words.add(s.substring(start));
return words;
}