读取、解析并用Java编写CSV

读取、解析并用Java编写CSV,java,parsing,csv,Java,Parsing,Csv,我试图读入一个csv文件,解析它,然后用解析后的数据写一个新的csv 我的输入.csv文件如下所示: [Altice<SPLIT> France<SPLIT> nNUMFP<SPLIT> 4.875<SPLIT> 19<SPLIT> 99.875<SPLIT>-<SPLIT>100.375<SPLIT> 4.909<SPLIT>/<SPLIT>4.752<SPLIT>

我试图读入一个csv文件,解析它,然后用解析后的数据写一个新的csv

我的输入.csv文件如下所示:

[Altice<SPLIT> France<SPLIT>
nNUMFP<SPLIT> 4.875<SPLIT> 19<SPLIT> 99.875<SPLIT>-<SPLIT>100.375<SPLIT> 4.909<SPLIT>/<SPLIT>4.752<SPLIT> 371.<SPLIT>/<SPLIT>371.<SPLIT> 2.4MMM<SPLIT> B+<SPLIT> Ba3<SPLIT>
nNUMFP<SPLIT> 6<SPLIT> 22<SPLIT> 102.000<SPLIT>-<SPLIT>102.500<SPLIT> 5.559<SPLIT>/<SPLIT>5.450<SPLIT> 422.<SPLIT>/<SPLIT>411.<SPLIT> 4MMM<SPLIT> B+<SPLIT> Ba3<SPLIT>
nNUMFP<SPLIT> 6.25<SPLIT> 24<SPLIT> 103.000<SPLIT>-<SPLIT>103.750<SPLIT> 5.741<SPLIT>/<SPLIT>5.616<SPLIT> 420.<SPLIT>/<SPLIT>407.<SPLIT> 1.375M<SPLIT> B+<SPLIT> Ba3<SPLIT>
nAltice<SPLIT> S.A.<SPLIT>
nATCNA<SPLIT> 7.75<SPLIT> 22<SPLIT> 103.250<SPLIT>-<SPLIT>104.000<SPLIT> 7.005<SPLIT>/<SPLIT>6.837<SPLIT> 568.<SPLIT>/551.<SPLIT> 2.9MMM<SPLIT> B<SPLIT> B3<SPLIT>
nATCNA<SPLIT> 7.625<SPLIT> 25<SPLIT> 101.875<SPLIT>-<SPLIT>102.375<SPLIT> 7.309<SPLIT>/<SPLIT>7.227<SPLIT> 573.<SPLIT>/<SPLIT>565.<SPLIT> 1.48MM<SPLIT> N.A.<SPLIT> B3e<SPLIT>
n
[Altice France
nNUMFP 4.875 19 99.875-100.375 4.909/4.752 371./371.2.4mm B+Ba3
nNUMFP 6 22 102.000-102.500 5.559/5.450 422./411.4毫米B+Ba3
nNUMFP 6.25 24 103.000-103.750 5.741/5.616 420./407.1.375MB+Ba3
纳尔蒂斯股份有限公司。
nATCNA 7.75 22 103.250-104.000 7.005/6.837 568./551.2.9mm B B3
nATCNA 7.625 25 101.875-102.375 7.309/7.227 573./565.1.48毫米N.A.B3e
N
我的代码是:

public class TokenizerParser {

    public static void main(String[] args) throws Exception {
          //Build reader instance
          CSVReader reader = new CSVReader(new FileReader("rawtest.csv"), ',', '"', 1);
          CSVWriter writer = new CSVWriter(new FileWriter(csv));

          //Read all rows at once
          List<String[]> allRows = reader.readAll();

          //Read CSV line by line and use the string array as you want
         for(String[] row : allRows){
             String changedString = Arrays.toString(row).replace("[", ""); // This is an example for parsing
             System.out.println(changedString);

         }

         // Here I do not know what to do to write the parsed data back to a .csv
         for(String[] output : allRows) {

         }
    }
}
公共类TokenizerParser{
公共静态void main(字符串[]args)引发异常{
//构建阅读器实例
CSVReader reader=新的CSVReader(新的文件读取器(“rawtest.csv”),,,,,,,”,1);
CSVWriter writer=新CSVWriter(新文件编写器(csv));
//一次读取所有行
List allRows=reader.readAll();
//逐行读取CSV,并根据需要使用字符串数组
for(字符串[]行:所有行){
String changedString=Arrays.toString(row.replace(“[”,”);//这是一个解析示例
系统输出打印项次(更改字符串);
}
//在这里,我不知道如何将解析后的数据写回.csv
for(字符串[]输出:所有行){
}
}
}
因此,我可以读取并执行解析操作,但是如何将控制台中System.out.println(changedString)中看到的解析字符串写入一个新的.csv文件


非常感谢您的帮助!

您正在for循环中本地保存已解析/更改的字符串。如果您将此字符串保存到另一个列表中,以后可以重新使用它

List<String> parsedStrings = new ArrayList<>();
for(String[] row : allRows){
    String changedString = Arrays.toString(row).replace("[","");
    parsedsString.add(changedString);
}
List parsedStrings=new ArrayList();
for(字符串[]行:所有行){
字符串changedString=Arrays.toString(行).replace(“[”,”);
parsedstring.add(changedString);
}
试试这个:

    for(String[] output : allRows) {

        //get current row
        String[] parsedRow=new String[output.length];
        for(int i=0;i<output.length;i++){
            //parse each column
            parsedRow[i]=output[i].replace("[", "");
        }

        //write line
        writer.writeNext(parsedRow);


    }
    writer.close();
for(字符串[]输出:所有行){
//获取当前行
String[]parsedRow=新字符串[output.length];

对于(int i=0;iTry,它是健壮而强大的。

请看Java教程:……或,并查看
write()
方法