무향향수

[Java] charAt()과 indexOf()의 차이 본문

SW아카데미 (23)/JAVA

[Java] charAt()과 indexOf()의 차이

튼튼한장 2023. 8. 1. 13:49
 

목차🦖

  1. charAt(숫자)
  2. indexOf(문자)
  3.  charAt()과 indexOf()를 모두 사용해서 푼 코딩테스트 문제

 

더보기

학습 이유

 코딩테스트 문제를 풀다가 해당 문자열이 존재하는지 확인해야하는 문제가 나왔는데 이 상황에서 indexOf()를 사용해야 하는지, charAt()을 사용해야하는지 알 수 없었다. 이러한 이유로 블로그에 각각의 기능과 활용 방법에 대해 정리하고 기억하기 위하여 학습하게 되었다.


🦖 1. charAt(숫자)

charAt()은 변수명.charAt(숫자) 형식으로 사용한다.

사용자가 입력한 숫자가 2인경우, 해당 문자열의 2번째에 해당하는 문자를 출력해준다.

 

String S = "ROUND FACE";

System.out.println(S.charAt(2));
// 문자열 S의 2번째에 해당하는 'U'가 출력된다.

 


🦖 2. indexOf(문자)

 

indexOf()는 변수명.indexOf(문자열) 형식으로 사용한다.

사용자가 입력한 문자열이 해당 변수에 존재하는지, 존재하지 않는지 확인해준다.

만약 찾으려는 문자가 해당 문자열에 존재하지 않는 경우 '-1'을 반환하고,

존재하는 경우 문자열내에서 해당 문자의 위치를 반환해준다.

String S = "ROUND FACE";

System.out.println(S.indexOf("A")); // 문자열 S의 7번째에 위치하기 때문에 7이 반환된다.
System.out.println(S.indexOf("H")); // 문자열 S에 존재하지 않기 때문에 -1이 반환된다.

 


🦖 3. charAt()과 indexOf()를 모두 사용해서 푼 코딩테스트 문제

문제


코드

package CodingTest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class AntEscape3 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.valueOf(br.readLine()); // 테스트케이스 수

        for (int i = 0; i < T; i++) {

            String nm = br.readLine();
            StringTokenizer st = new StringTokenizer(nm);

            int N = Integer.valueOf(st.nextToken()); // 1차원 세상 길이
            int M = Integer.valueOf(st.nextToken()); // 부술 수 있는 벽의 수

            String S = br.readLine(); // 1차원 세상
            String x = br.readLine(); // 빈 줄
            int wall = 0; // 세상속 벽의 수

            for (int j = Math.min(S.indexOf("G"), S.indexOf("@")); j < Math.max(S.indexOf("G"), S.indexOf("@")); j++) { // G를 얻을 수 있는지 확인
                if (S.charAt(j) == '#')
                    wall++;
            }

            if (wall > M) { // G를 구할 수 없는 경우
                wall = 0;
                for (int j = Math.min(S.indexOf("@"), S.indexOf("O")); j < Math.max(S.indexOf("@"), S.indexOf("O")); j++) { // 탈출구까지 벽의 수 확인
                    if (S.charAt(j) == '#')
                        wall++;
                }
                System.out.println(wall > M ? "NO" : "YES");
            } else
                System.out.println("YES");
        }
    }
}

for (int j = Math.min(S.indexOf("G"), S.indexOf("@")); j < Math.max(S.indexOf("G"), S.indexOf("@")); j++) { // G를 얻을 수 있는지 확인
	if (S.charAt(j) == '#')
    	wall++;
}

// 문자열 S에 'G'또는 '@'가 있는 위치를 확인하고 싶을 때 => S.indexOf("G") 사용
// 문자열 S의 j번째에 '#'이 있는지 확인하고 싶을 때 => S.charAt(j) 사용

if (wall > M) { // G를 구할 수 없는 경우
	wall = 0;
	for (int j = Math.min(S.indexOf("@"), S.indexOf("O")); j < Math.max(S.indexOf("@"), S.indexOf("O")); j++) { // 탈출구까지 벽의 수 확인
		if (S.charAt(j) == '#')
			wall++;
	}
	System.out.println(wall > M ? "NO" : "YES");
} else
	System.out.println("YES");

⭐정리⭐

  매개변수 반환값
charAt() 숫자 문자열
indexOf() 문자 문자의 위치
 charAt()과 indexOf() 모두 문자열을 찾는데 사용한다.
charAt()은 매개변수로 숫자를 입력하여 해당 위치에 존재하는 문자열을 반환해주고
indexOf()는 매개변수로 문자를 입력하여 문자열에 해당 문자가 존재하는 위치를 반환해준다.