在java模式匹配中替换而不是追加?

时间:2014-03-03 03:28:23

标签: java regex

目前,此代码在找到匹配项的每一行之后将模式匹配附加到字符串缓冲区。但是,我想模式匹配并替换2种不同的模式,程序打印出它找到这两种模式的行的副本,因为它附加了每条线,它找到了模式匹配。有没有办法用替换打印出最后一行?我想我可能不得不在第一个模式匹配器中将append更改为替换,但我不知道任何方法可以做到这一点。

public static void main(String[] args) throws FileNotFoundException {
    RealReadFile file = new RealReadFile();
    while (!file.endOfFile()) {
        String line = file.nextLine();
        Pattern cpochhammer = Pattern.compile("(\\(([^)]+)\\)_\\{([^}]+)\\})");
        Matcher pochhammer = cpochhammer.matcher(line);
        StringBuffer rplcmntBfr = new StringBuffer();
        while(pochhammer.find())  {
           pochhammer.appendReplacement(rplcmntBfr, "\\\\pochhammer{$2}{$3}");
        }
        pochhammer.appendTail(rplcmntBfr);
        Pattern npochhammer = Pattern.compile("(\\(([^)]+)\\)_(.))");
        Matcher ppochhammer = npochhammer.matcher(rplcmntBfr);
        while(ppochhammer.find())  {
               ppochhammer.appendReplacement(rplcmntBfr, "\\\\pochhammer{$2}{$3}");
            }
            //ppochhammer.appendTail(rplcmntBfr);

        System.out.println(rplcmntBfr);
    }
}

1 个答案:

答案 0 :(得分:1)

在第一个和第二个替换循环之间将rplcmntBfr设置为匹配器后,必须使用

清除缓冲区
rplcmntBfr.setLength(0);

否则,当您在第二个循环中正确替换rplcmntBfr的值时,其结果是附加到第一个替换的结果,这是不正确的。下次替换的结果需要 替换 rplcmntBfr的内容。