我是否遗漏了什么,或者StringBuilder缺少与普通string类相同的“用string B替换字符串A的所有匹配项”功能?StringBuilder的替换功能并不完全相同。有没有什么方法可以在不使用普通的String类生成多个String的情况下更有效地做到这一点呢?
发布于 2010-08-13 07:05:59
你可以写一个循环:
public static void replaceAll(StringBuilder builder, String from, String to) {
int index = builder.indexOf(from);
while (index != -1) {
builder.replace(index, index + from.length(), to);
index += to.length(); // Move to the end of the replacement
index = builder.indexOf(from, index);
}
}
请注意,在某些情况下,使用它可能会更快
,从后面工作。我怀疑如果你用一个短字符串替换一个长字符串,情况就是这样--所以当你开始的时候,任何替换字符串都有更少的需要复制的东西。无论如何,这应该给你一个起点。
发布于 2010-08-13 07:16:59
你可以使用
模式
/
匹配器
..。在Matcher javadocs中:
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());
发布于 2015-10-23 15:15:30
@Adam:我认为在你的代码片段中,你应该跟踪m.find()的起始位置,因为字符串替换可能会改变最后一个字符匹配后的偏移量。
public static void replaceAll(StringBuilder sb, Pattern pattern, String replacement) {
Matcher m = pattern.matcher(sb);
int start = 0;
while (m.find(start)) {
sb.replace(m.start(), m.end(), replacement);
start = m.start() + replacement.length();
}
}
https://stackoverflow.com/questions/3472663
复制相似问题