具有简单字符串操作的StringIndexOutOfBoundsException

时间:2016-11-01 16:33:03

标签: java

    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)

4 个答案:

答案 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

进行调用