使用Java从CSV文件中过滤掉数字

时间:2016-05-13 09:29:44

标签: java regex excel csv pattern-matching

我是CSV Parsing的新手。我有一个CSV文件,其中第3列(描述字段)可能有一个或多个6位数字以及其他值。我需要过滤掉这些数字并将它们写在与每行对应的相邻列中。

例如:

3rd column                       4th column
=============                    ===========
123456adjfghviu77                123456

shgdasd234567                    234567

123456abc:de234567:c567890d      123456-234567-567890

12654352474                        

请帮忙。这就是我到目前为止所做的。

        String strFile="D:/Input.csv";
        CSVReader reader=new CSVReader(new FileReader(strFile));

        String[] nextline;
        //int lineNumber=0;
        String str="^[\\d|\\s]{5}$";
        String regex="[^\\d]+";

        FileWriter fw = new FileWriter("D:/Output.csv");
        PrintWriter pw = new PrintWriter(fw);


        while((nextline=reader.readNext())!=null){
            //lineNumber++;
            //System.out.println("Line : "+lineNumber);
            if(nextline[2].toString().matches(str)){
            pw.print(nextline[1]);
            pw.append('\n');
            System.out.println(nextline[2]);
            }               

        }
        pw.flush();

2 个答案:

答案 0 :(得分:2)

我建议只匹配6位数的块,并在收集匹配时构建一个新的字符串:

String s = "123456abc:de234567:c567890d";
StringBuilder result = new StringBuilder();
Pattern pattern = Pattern.compile("(?<!\\d)\\d{6}(?!\\d)");  // Pattern to match 6 digit chunks not enclosed with digits
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    if (result.length() == 0)  {              // If the result is empty
        result.append(matcher.group(0));      // add the 6 digit chunk
    } else {
       result.append("-").append(matcher.group(0)); // else add a delimiter and the digits after it
    }
} 
System.out.println(result.toString());      // Demo, use this to write to your new column

请参阅Java demo

更新:我已将模式从"\\d{6}"更改为"(?<!\\d)\\d{6}(?!\\d)",以确保我们只匹配用其他数字括起来的6位数块。

请参阅regex demo

答案 1 :(得分:1)

所有权利,这是你需要做的第三栏中的数字:

while((nextline=reader.readNext())!=null){
     //For every column (columnNumber)
     String digitsInColumn = nextline[columnNumber].replaceAll("\\D+","");
     // Your treatment 

}