为了账号安全,请及时绑定邮箱和手机立即绑定

使用StringBuilder替换所有出现的String吗?

使用StringBuilder替换所有出现的String吗?

潇湘沐 2019-10-19 14:08:17
我是否缺少某些内容,或者StringBuilder是否缺少与普通String类相同的“用字符串B替换所有出现的字符串A”功能?StringBuilder的替换功能并不完全相同。有没有什么方法可以更有效地使用普通的String类生成多个String?
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

好了,您可以编写一个循环:


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);

    }

}

请注意,在某些情况下lastIndexOf,从背面使用它可能会更快。我怀疑是用短字符串替换长字符串的情况-因此,从一开始,任何替换副本的复制量都会减少。无论如何,这应该给您一个起点。


查看完整回答
反对 回复 2019-10-19
?
波斯汪

TA贡献1811条经验 获得超4个赞

您可以使用模式 / 匹配器。从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());


查看完整回答
反对 回复 2019-10-19
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

查看String类的replaceAll方法的JavaDoc :


用给定的替换项替换该字符串中与给定的正则表达式匹配的每个子字符串。以str.replaceAll(regex,repl)形式调用此方法,其结果与表达式完全相同


java.util.regex.Pattern.compile(regex).matcher(str).replaceAll(repl)


如您所见,您可以使用Pattern和Matcher来做到这一点。


查看完整回答
反对 回复 2019-10-19
  • 3 回答
  • 0 关注
  • 1804 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信