目前,此代码在找到匹配的每一行后将模式匹配附加到字符串缓冲区。但是,我想进行模式匹配并替换 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/