我想使用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

最佳答案

您的代码无法正确编译,但这是由于某些"无法转义引起的。

但这应该可以解决问题:

String patternString = "(?:^.,|)([^\"]*?|\".*?\")(?:,|$)";
Pattern pattern = Pattern.compile(patternString, Pattern.MULTILINE);
(?:^.,|)是一个非捕获组,与行开头的单个字符匹配
([^\"]*?|\".*?\")是一个捕获组,可以匹配除“或”之间的所有内容“”
(?:,|$)是与行尾或逗号匹配的非捕获组。

注意:^$仅按使用Pattern.MULTILINE标志编译模式时所述的方式工作

08-28 22:24