Matcher.appendReplacement()和Matcher.appendTail()是否有替代StringBuilder而不是StringBuffer?
是否有一种“简单”的方法来“转换”使用StringBuffer调用Matcher来代替使用StringBuilder的Java代码?
谢谢, 詹姆斯
答案 0 :(得分:7)
简短的回答,还没有。直到Java 9.在Java 9中,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());
答案 1 :(得分:2)
简短的回答,没有。
在撰写本文时,这是最新Java 8中的API。
但是,其中一个重载的StringBuffer
构造函数将CharSequence
作为参数,StringBuilder
(就像StringBuffer
)IS-A CharSequence
。
例如:
matcher.appendReplacement(
new StringBuffer(yourOriginalStringBuilder), "yourReplacement"
);