【问题标题】:How to remove garbage values from csv file?如何从 csv 文件中删除垃圾值?
【发布时间】:2015-02-08 17:28:08
【问题描述】:

我有一个包含一些数据的 CSV 文件,其中也有很多无效数据。如何只打印有效数据并保留其余数据?

我的数据是这样的:-

1,Ron,1234,XYZ
2,Harry,214,SDA
3,Kent,1786,GHI
SAMNE:MANNS;ndndo
kdbg;obmgdf;brhj 

我只想打印前 3 行并删除最后两个无效行。我在 Eclipse 中这样做。

【问题讨论】:

  • 如何定义有效行?
  • 考虑一个有效的行:- S.No,Name,Num, Company
  • valid 表示以整数开头的行,后跟 ',' ?
  • @Shamik 是的,以整数开头
  • 然后解析每一行并检查它是否以整数开头,如果则打印它。

标签: java eclipse csv


【解决方案1】:

你可以试试这样的。

    BufferedReader reader = new BufferedReader(new FileReader(new File("~/input.csv")));
    String line;
    while((line = reader.readLine())!= null){
        try{

            int sno = Integer.parseInt( line.split(",")[0]);
            System.out.println("Valid "+ line);
            //Continue doing more checks or other operations 

        }catch(NumberFormatException e){
            //Skip invalid line  
            System.out.println("Invalid row "+ line);
        }
    }

【讨论】:

    【解决方案2】:

    你应该通过正则表达式检查是否有效,抛出异常是个坏主意。

    BufferedReader reader = new BufferedReader(new FileReader(new File("~/input.csv")));
    String line;
    while((line = reader.readLine())!= null){
        if(line.matches("(\\d+,\\w+,\\d+,\\w+)"){
           print line;
        }
     }
    

    【讨论】:

      【解决方案3】:

      类似这样的:

      import java.io.BufferedReader;
      import java.io.FileNotFoundException;
      import java.io.FileReader;
      import java.io.IOException;
      
      public class JavaApplication1 {
      
          public static void main(String[] args) throws FileNotFoundException, IOException {
              try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
                  StringBuilder sb = new StringBuilder();
                  String line = reader.readLine();
                  while (line != null) {
                      String[] part = line.split(",");
                      try {
                          Integer.parseInt(part[0]);
                          System.out.println(line);
                      } catch (NumberFormatException nfe) {
                          // This is not a valid line
                      }
                      line = reader.readLine();
                  }
              }
          }
      }
      

      【讨论】: