【问题标题】:Read, parse and then write a CSV in Java在 Java 中读取、解析然后写入 CSV
【发布时间】:2015-02-19 09:30:42
【问题描述】:

我正在尝试读取一个 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

我的代码是:

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) {

         }
    }
}

所以我可以读取并执行解析操作,但是如何将我可以从控制台中的 System.out.println(changedString) 看到的解析字符串写入新的 .csv 文件?

非常感谢您的帮助!

【问题讨论】:

标签: java parsing csv


【解决方案1】:

试试这个:

    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();

【讨论】:

    【解决方案2】:

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

    List<String> parsedStrings = new ArrayList<>();
    for(String[] row : allRows){
        String changedString = Arrays.toString(row).replace("[","");
        parsedsString.add(changedString);
    }
    

    【讨论】:

      【解决方案3】:

      试试Super CSV,它健壮而强大。

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 2017-10-22
        相关资源
        最近更新 更多