3 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
字符串是不可變的所以調(diào)用
copyOfTemplate.replace(placeholder, "Hello!");
沒有將它分配給任何有效的東西什么都不做。它返回一個(gè)帶有替換的新字符串,您忽略了它。任何半體面的 IDE 都會(huì)警告您這一點(diǎn):
此外,String copyOfTemplate = template
也沒有真正做任何事情。這不是副本。它只是一個(gè)指向相同底層字符串的新變量。沒有方法可以復(fù)制字符串,因?yàn)樽址遣豢勺兊模虼烁北咀兊脽o用。
你要
String copyOfTemplate = template.replace(placeholder, "Hello!");
我建議閱讀有關(guān)字符串的Oracle 教程。您似乎錯(cuò)過了一些基礎(chǔ)知識(shí)。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
我在您的代碼中看到兩個(gè)主要問題:
copyOfTemplate.replace(placeholder, "Hello!");
返回一個(gè)新字符串,它不會(huì)更新它。您必須將其分配給一個(gè)新變量。最后的
if
聲明if(!copyOfTemplate.equals(result));
由于您添加了分號,因此 if 不執(zhí)行任何操作,并且您始終可以訪問該fail()
方法。就好像你寫道:if(!copyOfTemplate.equals(result)) { } 失?。ǎ?

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
請使用以下代碼
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);
}
}
添加回答
舉報(bào)