使用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 }