Java - 我怎样才能修改我的 replacePlaceholder 方法,以便它不再有我的 mad libs 程序的索引越界错误?
Java - How can I revise my replacePlaceholder method so that it no longer has an index out of bounds error for my mad libs program?
问题已解决,以下代码未更新
在一位乐于助人的用户的帮助下,我已经解决了这段代码的问题。以下代码未更新。
// replacePlaceholder method
private String replacePlaceholder(String template, String placeholder, String replacement)
{
String newTemplate = "";
int count = 0;
for(int i = 0; i < template.length(); i++)
{
if(count == 0 && template.substring(i, i + placeholder.length()).equals(placeholder))
{
newTemplate += replacement;
count++;
}
else if(count != 1)
{
newTemplate += template.substring(i, i + 1);
}
}
return newTemplate;
}
正如评论所指出的,您应该只使用 String.replace(String, String)
或 String.replaceAll(String, String)
而不是自己编写。您当前的实施存在许多问题:
template.substring(i, placeholder.length() + 1)
应该是 template.substring(i, i + placeholder.length())
。否则,您的 beginIndex
可以大于 endIndex
。
- 如果模板以半个占位符结尾,
substring
将失败,因为 endIndex
太大。
aaa[placeholder]aaa
将变成 aaareplacementplaceholder]aaa
你当前的代码,因为你没有跳过其余的占位符。
- 第二个占位符不会像你说的那样被替换
count++
但永远不会重置它,使你的 if
总是转到 else
.
- 可能更多
问题已解决,以下代码未更新 在一位乐于助人的用户的帮助下,我已经解决了这段代码的问题。以下代码未更新。
// replacePlaceholder method
private String replacePlaceholder(String template, String placeholder, String replacement)
{
String newTemplate = "";
int count = 0;
for(int i = 0; i < template.length(); i++)
{
if(count == 0 && template.substring(i, i + placeholder.length()).equals(placeholder))
{
newTemplate += replacement;
count++;
}
else if(count != 1)
{
newTemplate += template.substring(i, i + 1);
}
}
return newTemplate;
}
正如评论所指出的,您应该只使用 String.replace(String, String)
或 String.replaceAll(String, String)
而不是自己编写。您当前的实施存在许多问题:
template.substring(i, placeholder.length() + 1)
应该是template.substring(i, i + placeholder.length())
。否则,您的beginIndex
可以大于endIndex
。- 如果模板以半个占位符结尾,
substring
将失败,因为endIndex
太大。 aaa[placeholder]aaa
将变成aaareplacementplaceholder]aaa
你当前的代码,因为你没有跳过其余的占位符。- 第二个占位符不会像你说的那样被替换
count++
但永远不会重置它,使你的if
总是转到else
. - 可能更多