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

标签 java regex

目前,此代码在找到匹配的每一行后将模式匹配附加到字符串缓冲区。但是,我想进行模式匹配并替换 2 个不同的模式,并且该程序正在打印找到这两个模式的行的重复项,因为它会附加找到模式匹配的每一行。有没有办法只打印出最后一行的替换内容?我想我可能必须将第一个模式匹配器中的附加更改为替换,但我不知道有任何方法可以做到这一点。

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);
    }
}

最佳答案

一旦将rplcmntBfr设置到第一个和第二个替换循环之间的匹配器中,您必须使用以下命令清除缓冲区

rplcmntBfr.setLength(0);

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

关于java - 在java模式匹配中替换而不是附加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22138158/

相关文章:

java - 让我的世界玩家看向点

Java For 循环模式

python - [Python] : Python re. 长字符串行的搜索速度优化

regex - Bash Regex 如何检索值

安卓分割标签

java - java中匹配表达式时可以返回特定值吗

java - 更新嵌套控件内的 PrimeFaces 数据表?

java - 如何在 CentOS 上安装 Java SDK?

java.lang.OutOfMemory :PermGen exception in Apache tomcat 内存不足

javascript - 正则表达式返回 null