Java :在 CSV 文件中为数据添加引号

Java : add quotes to data in a CSV file

提问人:bobby.dreamer 提问时间:8/7/2017 更新时间:8/7/2017 访问量:1389

问:

我正在尝试向 CSV 文件中的数据添加引号。以下是我所做的方法。我相信有一种更简单的方法使用正则表达式或其他方法。想知道。

    public List<String> addQuotes2List(List<String> list, String delimiter){
        List<String> tempList = new ArrayList<>();
        String temp="", value;
        Integer i=-1, j=0;

        for(String s1: list){
            //println("S1 - "+s1+" - "+Arrays.asList(s1.split("\\"+delimiter)) );
            i++;

tempList = Arrays.asList(s1.split("\\"+delimiter));

            //println(tempList);
            temp="";j=0;
            for(String s2:tempList){
                if(j>0)
                    temp+=delimiter;                

                //println("S2 - "+s2);
                temp+="\""+s2+"\"";

                j++;                
            }
            list.set(i, temp);          
        }

        return list;
    }

输入

tempList.clear();
    tempList.add("Sushanth.Bobby.Lloyds");
    tempList.add("Watch.a.lot.of.movies");
    tempList.add("main.hobby.is.programming");
    tempList.add("programming.is.dangerous.addiction.of.all");
    tempList = a.addQuotes2List(tempList,".");

    println("tempList - "+tempList.size());
    for(String s:tempList)
        println(s);

输出

tempList - 4
"Sushanth"."Bobby"."Lloyds"
"Watch"."a"."lot"."of"."movies"
"main"."hobby"."is"."programming"
"programming"."is"."dangerous"."addiction"."of"."all"

谢谢 苏珊特

Java CSV 行情

评论


答:

0赞 Erich 8/7/2017 #1

如果你只处理字符串 . 你可以把<.>告诉<”。>并在开头和结尾处附加 <“> 。

public List<String> addQuotes2List2(List<String> list, String delimiter) {
    List<String> tempList = new ArrayList<String>();
    // null check list and delimiter
    String rStr = "\""+delimiter+"\"";
    String rmsg = "";
    for (String s1 : list) {
        rmsg = s1.replace(delimiter, rStr);
        rmsg = "\""+rmsg+"\"";
        tempList.add(rmsg);
    }
    return tempList;
}

这里可能不需要正则表达式。(替换和替换全部由正则表达式制作)

0赞 Kim Kern 8/7/2017 #2

如果您使用的是 Java 8,则可以使用流来使其更具可读性。

public List<String> addQuotes2List(List<String> list, String delimiter){
  return list.stream()
    .map(line -> line.split("\\"+delimiter))
    .map(this::addQuotes)
    .map(entries -> String.join(delimiter, entries))
    .collect(Collectors.toList());
}

private List<String> addQuotes(String[] entries) {
  return Arrays.stream(entries)
    .map(entry -> String.format("%s", entry))
    .collect(Collectors.toList());
}