【发布时间】:2013-05-09 18:08:47
【问题描述】:
我想使用 parsingMethod 解析文件的行
test.csv
Frank George,Henry,Mary / New York,123456
,Beta Charli,"Delta,Delta Echo
", 25/11/1964, 15/12/1964,"40,000,000.00",0.0975,2,"King, Lincoln ",Alpha
这是我读行的方式
public static void main(String[] args) throws Exception {
File file = new File("C:\\Users\\test.csv");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line2;
while ((line2= reader.readLine()) !=null) {
String[] tab = parsingMethod(line2, ",");
for (String i : tab) {
System.out.println( i );
}
}
}
public static String[] parsingMethod(String line,String parser) {
List<String> liste = new LinkedList<String>();
String patternString ="(([^\"][^"+parser+ "]*)|\"([^\"]*)\")" +parser+"?";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher =pattern.matcher(line);
while (matcher.find()) {
if(matcher.group(2) != null){
liste.add(matcher.group(2).replace("\n","").trim());
}else if(matcher.group(3) != null){
liste.add(matcher.group(3).replace("\n","").trim());
}
}
String[] result = new String[liste.size()];
return liste.toArray(result);
}
}
输出:
Frank George
Henry
Mary / New York
123456
Beta Charli
Delta
Delta Echo
"
25/11/1964
15/12/1964
40,000,000.00
0.0975
2
King
Lincoln
"
Alpha
Delta
Delta Echo
我想删除这个 " , 任何人都可以帮助我改进我的模式。
预期输出
Frank George
Henry
Mary / New York
123456
Beta Charli
Delta
Delta Echo
25/11/1964
15/12/1964
40,000,000.00
0.0975
2
King
Lincoln
Alpha
Delta
Delta Echo
第 3 行的输出
25/11/1964
15/12/1964
40
000
000.00
0.0975
2
King
Lincoln
【问题讨论】:
-
如何编译?您正在为 patternString 分配一个字符串数组。
String patternString = "(([^\"][^","]*)|\"([^\"]*)\")","?"; -
这段代码无法编译,你有一个错误:
String patternString = "(([^\"][^","]*)|\"([^\"]*)\")","?"; -
@Joan :我不擅长模式字符串。但是这段代码可以编译。我从控制台复制了输出。
-
@RicardoCacheira:我不擅长模式字符串。但是这段代码可以编译。我从控制台复制了输出
-
正如 anana 所说,您必须对双反斜杠进行转义,但即使您这样做,程序也不会返回输出。我试过了。
标签: java regex string parsing csv