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

我是新来的CSVparsing。 我有一个CSV文件,第三列(描述字段)可能有一个或多个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(); 

我build议只匹配6位块,并收集匹配时build立一个新的string:

 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演示

更新:我已经将模式从"\\d{6}"更改为"(?<!\\d)\\d{6}(?!\\d)" ,以确保我们只匹配6位大块与其他数字一起封闭。

看正则expression式演示

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

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