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

使用 String.replace 复制最终字符串

使用 String.replace 复制最终字符串

千万里不及你 2021-11-11 16:07:38
我有以下测试:public void testStringReplace()    {            final String placeholder = "$ph$";        final String template = "<test>" + placeholder + "</test>";        final String result = "<test>Hello!</test>";        String copyOfTemplate = template;        copyOfTemplate.replace(placeholder, "Hello!");        if(!copyOfTemplate.equals(result));            fail();    }测试总是失败,但为什么呢?我必须如何定义copyOfTemplate才能改变它?或者我在这里遗漏了一些其他细节?
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

字符串是不可变的所以调用

copyOfTemplate.replace(placeholder, "Hello!");

没有将它分配给任何有效的东西什么都不做。它返回一个带有替换的新字符串,您忽略了它。任何半体面的 IDE 都会警告您这一点:

//img1.sycdn.imooc.com//618ccf640001897503550067.jpg

此外,String copyOfTemplate = template也没有真正做任何事情。这不是副本。它只是一个指向相同底层字符串的新变量。没有方法可以复制字符串,因为字符串是不可变的,因此副本变得无用。

你要

String copyOfTemplate = template.replace(placeholder, "Hello!");

我建议阅读有关字符串Oracle 教程。您似乎错过了一些基础知识。


查看完整回答
反对 回复 2021-11-11
?
回首忆惘然

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

我在您的代码中看到两个主要问题:

  • 您对String#replace 的使用

    copyOfTemplate.replace(placeholder, "Hello!");返回一个新字符串,它不会更新它。您必须将其分配给一个新变量。

  • 最后的if声明

    if(!copyOfTemplate.equals(result));由于您添加了分号,因此 if 不执行任何操作,并且您始终可以访问该fail()方法。就好像你写道:

    if(!copyOfTemplate.equals(result)) {
    }
    失败();


查看完整回答
反对 回复 2021-11-11
?
郎朗坤

TA贡献1921条经验 获得超9个赞

请使用以下代码


public static void main(String[] args) {


        final StringBuilder placeholder = new StringBuilder("$ph$");

        final StringBuilder template = new StringBuilder("<test>" + placeholder + "</test>");

        final StringBuilder result = new StringBuilder("<test>Hello!</test>");


        replaceString(template, placeholder.toString(), "Hello!");

        System.out.println(template);


    }


    public static void replaceString(StringBuilder sb, String toReplace, String replacement) {

        int index = -1;

        while ((index = sb.lastIndexOf(toReplace)) != -1) {

            sb.replace(index, index + toReplace.length(), replacement);

        }

    }


查看完整回答
反对 回复 2021-11-11
  • 3 回答
  • 0 关注
  • 160 浏览

添加回答

举报

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