public static String replaceChar(String word, char c, int i)
{
if(word.length()<i)
{
System.out.println(word);
}
return word.substring(0, i) + c + word.substring(i + 1);
}
当我在下面使用此输入时,我收到一个错误,因为字符串不像索引i
那么大,这应该发生什么,但是如何通过返回word
来消除此错误当索引i
超出范围时?
System.out.println(replaceChar("run",'a', 3));
这是错误
Exception in thread "main" run
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1931)
at pa5.Hangman2.replaceChar(Hangman2.java:41)
at pa5.Hangman2.main(Hangman2.java:17)
答案 0 :(得分:2)
public static String replaceChar(String word, char c, int i){
if(0 < i && i < word.length()){
return word.substring(0, i) + c + word.substring(i + 1);
}
return word;
}
仅当给定索引的有效值小于给定word
的长度时,它才会返回新字符串。
答案 1 :(得分:0)
您的条件应该是:
if(word.length()<i)
{
return word;
}
相反,您的代码当前进入条件打印 word
,然后继续进行子串行为。当word
大于字符串的长度时,您打算返回 i
不变。验证i
是否大于或等于零也是一个好主意。
您的错误消息显示“String index out of range: -1
” - 这意味着您将-1
传递到replaceChar()
方法。看一下Hangman2.java
文件的第17行;这就是你用{0}调用replaceChar()
的地方。
答案 2 :(得分:0)
你必须改变if和else,因为字符串的最大索引等于string.length() - 。
Login
答案 3 :(得分:0)
正如dimo414所说&#34;同样也是一个好主意,以验证我是否大于或等于零&#34;。你还应该检查你的字符串是不是很长i + 1。 即。
public static String replaceChar(String word, char c, int i) {
if(word.length() > i){
return word.substring(0, i) + c + word.substring(i + 1);
}
else{
return word;
}
}
PS你的错误说你正在使用索引-1
进行调用