[error] String index out of range: 11

Nam_JU·2022년 8월 3일
0

ErrorLog

목록 보기
21/26

에러 배경

자바 문자열 코테 문제를 풀다가 해당 에러가 났다
검색을 해보니 지정한 값에서 범위를 벗어나면 해당 에러가 난다고 한다


에러 코드

public class reMain11 {
    public static  String solution(String str){
        String answer ="";
        int num=1;
        for (int i=0; i<str.length(); i++){
            if (str.charAt(i) == str.charAt(i+1)){
                num++;
                answer += str.charAt(i)+num;
            }else{
                answer += str.charAt(i);
            }
        }
        return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(solution(str));
    }
}

String index out of range 에러


해결방법

public class Main11 {
    public static String solution(String str){
     String answer = "";
     str = str+" "; // 빈공간을 넣어준다 out-of-range 에러
     int cnt=1;
                        //빈공간 전까지만 돌려준다
        for (int i=0; i< str.length()-1; i++){
            if (str.charAt(i) == str.charAt(i+1)){
                cnt ++;
            }else {
                answer += str.charAt(i);
                if (cnt>1)        
                    answer += String.valueOf(cnt); //문자열 변환
                cnt=1; //초기화
            }
        }
     return answer;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println(solution(str));
    }
}

기존 코드의 문제는 for문이 도는동안 아래의 if문에서 인덱스 i와 인덱스 i+1이 서로 비교를 하다가 for문이 끝나고 i+1이 수행을 하지 못해서 해당 에러가 났다.
  1. 먼저 문자열에 빈 공간을 추가해준다 str+" ";
  2. for 문의 길이를 str.length()-1 만큼 빈공간 전까지 돌도록 범위를 지정한다
  • 그냥 범위를 length()-1로 하면 안되나?
    -> 그럼 마지막 문자는 수행할 수 없음
profile
개발기록

0개의 댓글