Java 程序在所有行中添加双引号

Java Program Add double Quote in all the line

我正在编写一个简单的程序,它获取一个 csv 文件并生成一个包含新列的 csv。我的问题是:程序引用旧列和所有列。 在我的代码下面

public class CSVmodifier {

    public static void modify(String Path,String Escape) throws IOException {
        int i=0;
        String filename = new File(Path).getName().toString();
        //setName(string) modify the original filename
                String fileoutname = setName(filename);
        File file= new File(fileoutname);
        try {
            FileWriter out = new FileWriter(file);
            Reader reader = 
                        Files.newBufferedReader(Paths.get(Path));
            CSVReader csvReader = new CSVReader(reader);
            CSVWriter csvWriter = new CSVWriter(out);
            String[] nextRecord;
            while ((nextRecord = csvReader.readNext()) != null) {
                int dimension = nextRecord.length;
                String[] newline = new String[dimension+1];
                int y = 0;
                                //formatNumber create a string number with 9 
                                //zero in the front-> 1 > "000000001"
                newline[0]=formatNumber(i+1);
                while(y<dimension) {
                    newline[y+1] = nextRecord[y];
                    y++;
                }
                i+=1;
                csvWriter.writeNext(newline);
            }
            csvWriter.close();


        } finally {


        }
    }

    public static String formatNumber(int i) {
        String formatted = String.format("%09d", i);
        return formatted;
    }


}

我的样本是:

"John","Doe","120 jefferson st.","Riverside", "NJ", "08075"

错误的输出是:

"000000001","""John""",""Doe"",""120 jefferson st."",""Riverside"", ""NJ"", ""08075"""

我无法上传文件,但我会向您展示一个存在相同问题的示例文件(输入行):

'1231';'02512710795';'+142142';'2019/12/12';'statale';'blablabla';'iradsasad';'-123131';'+414214141'; 
'003';'08206810965';'+000000001492106';'2019/06/23';'Scuola statale elemetare';'Ola!'

有输出行:

'000000001';"'1231';'02512710795';'+142142';'2019/12/12';'statale';'blablabla';'iradsasad';'-123131';'+414214141'; "
'000000002';"'003';'08206810965';'+000000001492106';'2019/06/23';'Scuola statale'; "

这对我有用,检查并告诉我。只需更改 while 块中的逻辑即可将多个双引号替换为单引号。

public class CSVmodifier {

public static void modify(String Path, String Escape) throws IOException {
    int i = 0;
    String filename = new File(Path).getName().toString();
    //setName(string) modify the original filename
    String fileoutname = setName(filename);
    File file = new File(fileoutname);
    try {
        FileWriter out = new FileWriter(file);
        Reader reader
                = Files.newBufferedReader(Paths.get(Path));
        CSVReader csvReader = new CSVReader(reader);
        CSVWriter csvWriter = new CSVWriter(out);
        String[] nextRecord;
        while ((nextRecord = csvReader.readNext()) != null) {
            int dimension = nextRecord.length;
            String[] newline = new String[dimension + 1];

            int y = 0;
            //formatNumber create a string number with 9 
            //zero in the front-> 1 > "000000001"
            newline[0] = formatNumber(i + 1);
            while (y < dimension) {
                newline[y + 1] = nextRecord[y].replace("\"\"", "\"");
                if (newline[y + 1].startsWith("\"") && newline[y + 1].endsWith("\"")) {
                    newline[y + 1] = newline[y + 1].substring(1, newline[y + 1].length() - 1);
                }
                y++;
            }
            i += 1;
            csvWriter.writeNext(newline);
        }
        csvWriter.close();

    } finally {

    }
}

public static String formatNumber(int i) {
    String formatted = String.format("%09d", i);
    return formatted;
}


}

我假设你的 CSVWriter class 是 com.opencsv.CSVWriter.
您正在使用 csvWriter.writeNext(String[]), which is a shortcut for writeNext(nextLine, true); (JavaDoc).
在这种情况下始终为真的第二个参数是 applyQuotesToAll:

True if all values are to be quoted. False applies quotes only to values which contain the separator, escape, quote, or new line characters.

所以您需要做的就是更改此行:

csvWriter.writeNext(newline)

对此:

csvWriter.writeNext(newline, false);