亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 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 都會警告您這一點:

http://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 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號