2016-11-01 33 views
1
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超出范围?的StringIndexOutOfBoundsException用简单的字符串操作

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

请始终包括确切的错误信息调用。 – dimo414

回答

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

太棒了,这个工作..但是,当你已经返回单词时,为什么添加额外的'System.out.println(单词)'? –

+0

没理由。我只是在那里添加它,因为原始代码片段有它。我刚刚删除它 –

0

你的条件应该是:

if(word.length()<i) 
{ 
    return word; 
} 

而不是你的代码目前进入条件,打印word,然后移动到子行为无论如何。您打算返回word不变时i大于字符串的长度。验证i大于或等于零也是一个好主意。


你的错误消息指出“String index out of range: -1” - 这意味着什么地方你在-1传递给你的replaceChar()方法。看看你的Hangman2.java文件的第17行;那就是你打电话给replaceChar()的地方。

+0

我试过这个,并得到了相同的错误 –

+0

感谢您包括实际的错误信息,更新我的答案。 – dimo414

0

您必须更改if和else,因为字符串的最大索引等于string.length()-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; 
     }      
    } 
0

正如dimo414所说:“确认i大于或等于零也是一个好主意”。你还应该检查你的字符串是不是很长的i + 1。 I.E.

public static String replaceChar(String word, char c, int i) 
{ 
    String ret=""; 

    if(i<0 || word.length()<i) 
    { 
     System.out.println(word); 
     return word; 
    } 
    ret= word.substring(0, i) + c; 
    if(word.length() > i+1){ 
     ret=ret+word.substring(i+1); 
    } 
    return ret; 
} 

PS你的错误说,你与指数-1运行到一个问题,当