有没有Matcher.appendReplacement()和Matcher.appendTail()的替代品,它接受StringBuilder而不是StringBuffer?
有没有一种“简单”的方法来“转换”Java代码,用StringBuffer调用Matcher来使用StringBuilder呢?
谢谢,詹姆斯
发布于 2017-01-26 01:55:32
简而言之,还没有。直到Java9。在Java9中,API中添加了Matcher.appendReplacement(StringBuilder,String)和Matcher.appendTail(StringBuilder)方法。
在此之前,如果你不需要在替换字符串中使用组替换,那么我仍然觉得这个解决方案“很简单”:
Matcher m = PATTERN.matcher(s);
StringBuilder sb = new StringBuilder();
int pos = 0;
while(m.find()) {
sb.append(s, pos, m.start());
pos = m.end();
sb.append("replacement")
}
sb.append(s, pos, s.length());即使你需要群体替代,它也会变得“适度”困难:
Matcher m = PATTERN.matcher(s);
StringBuilder sb = new StringBuilder();
int pos = 0;
while(m.find()) {
sb.append(s, pos, m.start());
pos = m.end();
if (m.start(1) >= 0) { // check if group 1 matched
sb.append(s, m.start(1), m.end(1)); // replace with group 1
}
}
sb.append(s, pos, s.length());发布于 2016-07-14 22:18:33
https://stackoverflow.com/questions/38376584
复制相似问题