2016-11-01 3 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를 입력 문자열의 행동에 이동 어쨌든. i이 문자열의 길이보다 큰 경우 을 반환하려면word을 변경하지 않았습니다. i이 0보다 크거나 같은지 확인하는 것도 좋은 생각입니다.


귀하의 오류 메시지가 "String index out of range: -1"를 말한다 -이 어딘가에 당신이 당신의 replaceChar() 방법 -1에 전달하는 것을 의미한다. Hangman2.java 파일의 17 행을 살펴보십시오. 그 곳에서 replaceChar()을 음수 값으로 지정합니다.

+0

나는 이것을 시도하고 동일한 오류가 발생했습니다 –

+0

내 대답을 업데이트하는 실제 오류 메시지를 포함 해 주셔서 감사합니다. – dimo414

0

문자열의 최대 인덱스가 string.length() -1이기 때문에 if 및 else를 변경해야합니다.

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가 0보다 크거나 같은지 확인하는 것도 좋은 생각"이라고 말했습니다. 또한 문자열이 정확히 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 문제로 실행할 때