3 回答
TA贡献1852条经验 获得超1个赞
字符串是不可变的所以调用
copyOfTemplate.replace(placeholder, "Hello!");
没有将它分配给任何有效的东西什么都不做。它返回一个带有替换的新字符串,您忽略了它。任何半体面的 IDE 都会警告您这一点:
此外,String copyOfTemplate = template
也没有真正做任何事情。这不是副本。它只是一个指向相同底层字符串的新变量。没有方法可以复制字符串,因为字符串是不可变的,因此副本变得无用。
你要
String copyOfTemplate = template.replace(placeholder, "Hello!");
我建议阅读有关字符串的Oracle 教程。您似乎错过了一些基础知识。
TA贡献1847条经验 获得超11个赞
我在您的代码中看到两个主要问题:
copyOfTemplate.replace(placeholder, "Hello!");
返回一个新字符串,它不会更新它。您必须将其分配给一个新变量。最后的
if
声明if(!copyOfTemplate.equals(result));
由于您添加了分号,因此 if 不执行任何操作,并且您始终可以访问该fail()
方法。就好像你写道:if(!copyOfTemplate.equals(result)) { } 失败();
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);
}
}
添加回答
举报