目前,此代码在找到匹配项的每一行之后将模式匹配附加到字符串缓冲区。但是,我想模式匹配并替换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);
}
}
答案 0 :(得分:1)
在第一个和第二个替换循环之间将rplcmntBfr
设置为匹配器后,必须使用
rplcmntBfr.setLength(0);
否则,当您在第二个循环中正确替换rplcmntBfr
的值时,其结果是附加到第一个替换的结果,这是不正确的。下次替换的结果需要 替换 rplcmntBfr
的内容。