안녕하세요, 이번 글에서는 자바에서 알고리즘 문제를 해결할 때 자주 사용하는 문자열 관련 메서드들을 정리해 보려고 합니다. 문자열 처리에 관한 문제는 알고리즘 문제 풀이에서 굉장히 자주 등장하는 유형 중 하나인데요, 자바에서는 다양한 문자열 관련 메서드들을 제공해 문제를 효율적으로 풀 수 있게 해줍니다.
자바에서 자주 사용하는 문자열 메서드 정리
알고리즘 문제를 풀다 보면 문자열을 다루는 경우가 정말 많습니다. 특히, 문자열 검색, 자르기, 비교, 분리 등의 작업은 필수적인데요, 자바에서 제공하는 String 클래스의 주요 메서드를 알고 있으면 문제 풀이 시간을 크게 단축할 수 있습니다.
아래 정리된 표는 자주 사용되는 10가지 메서드에 대해서 여러가지 대표 입력 값에 따라 출력값이 어떻게 나오는지 빠르게 확인할 수 있는 치트시트입니다. 메서드를 소개하고 설명하는 글은 많지만 빠르게 대표 입력 값에 대한 결과를 확인하려면 직접 코드를 돌려보는 시간을 줄이기 위해 참고용으로 만든 표입니다.
번호 | 메서드 | 설명 | 초기값 | 메서드 호출 예시 | 출력 |
1 | charAt(int index) | 특정 인덱스의 문자를 반환 | String s = "hello"; | s.charAt(1); | 'e' |
String s = "hello"; | s.charAt(0); | 'h' | |||
String s = "hello"; | s.charAt(4); | 'o' | |||
String s = "hello"; | s.charAt(5); // 예외 발생 (IndexOutOfBounds) | 예외 발생 | |||
2 | substring(int, int) | 시작 인덱스부터 끝 인덱스 전까지의 문자열 반환 | String s = "hello"; | s.substring(1, 4); | "ell" |
String s = "hello"; | s.substring(0, 5); | "hello" | |||
String s = "hello"; | s.substring(0, 0); | "" (빈 문자열) | |||
String s = "hello"; | s.substring(2, 2); | "" (빈 문자열) | |||
String s = "hello"; | s.substring(2, 5); | "llo" | |||
String s = "hello"; | s.substring(5, 5); | "" (빈 문자열) | |||
String s = "hello"; | s.substring(4, 2); // 예외 발생 (IndexOutOfBounds) | 예외 발생 | |||
3 | split(String regex) | 구분자로 문자열을 나눠 배열로 반환 | String s = "apple,banana"; | s.split(",")[1]; | "banana" |
String s = "apple,banana,cherry"; | s.split(",")[0]; | "apple" | |||
String s = "apple banana cherry"; | s.split(" ")[2]; | "cherry" | |||
String s = "apple,,banana"; | s.split(",")[1]; | "" (빈 문자열) | |||
String s = "apple,banana,cherry"; | s.split(",", 2)[1]; | "banana,cherry" | |||
String s = "apple,banana,cherry"; | s.split(",").length; | 3 | |||
4 | indexOf(String str) | 특정 문자열의 처음 등장 위치 반환 | String s = "hello world"; | s.indexOf("world"); | 6 |
5 | indexOf(String str) | 문자열이 없으면 -1 반환 | String s = "hello world"; | s.indexOf("apple"); | -1 |
String s = "hello hello"; | s.indexOf("hello"); | 0 | |||
String s = "hello hello"; | s.indexOf("hello", 5); | 6 | |||
String s = "hello world"; | s.indexOf("o"); | 4 | |||
String s = "hello"; | s.indexOf(""); | 0 | |||
String s = ""; | s.indexOf(""); | 0 | |||
6 | replace(CharSequence, CharSequence) | 문자열의 특정 부분을 다른 값으로 대체 | String s = "hello world"; | s.replace("world", "Java"); | "hello Java" |
String s = "hello world"; | s.replace("l", "x"); | "hexxo worxd" | |||
String s = "banana"; | s.replace("a", "o"); | "bonono" | |||
String s = "hello"; | s.replace("l", ""); | "heo" | |||
String s = "hello"; | s.replace("z", "y"); | "hello" | |||
7 | toCharArray() | 문자열을 문자 배열로 변환 | String s = "hello"; | s.toCharArray()[1]; | 'e' |
String s = "hello"; | s.toCharArray()[0]; | 'h' | |||
String s = " "; | s.toCharArray()[0]; | ' ' (공백) | |||
String s = ""; | s.toCharArray().length; | 0 (빈 배열) | |||
8 | equals(Object anObject) | 문자열이 같으면 true, 다르면 false | String s1 = "hello"; String s2 = "hello"; | s1.equals(s2); | true |
9 | equals(Object anObject) | 문자열이 다르면 false | String s1 = "hello"; String s3 = "world"; | s1.equals(s3); | false |
String s1 = "hello"; String s2 = "HELLO"; | s1.equals(s2); | false | |||
String s1 = ""; String s2 = ""; | s1.equals(s2); | true | |||
String s1 = null; String s2 = "hello"; | s2.equals(s1); | false | |||
10 | compareTo(String anotherString) | 두 문자열을 사전식으로 비교 | String s1 = "apple"; String s2 = "banana"; | s1.compareTo(s2); | -1 |
11 | compareTo(String anotherString) | 두 문자열이 같으면 0 | String s1 = "apple"; | s1.compareTo("apple"); | 0 |
String s1 = "apple"; | s1.compareTo("APPLE"); | 32 (대소문자 차이) | |||
String s1 = "apple"; String s2 = "apple pie"; | s1.compareTo(s2); | -4 (길이 차이) | |||
String s1 = ""; String s2 = "apple"; | s1.compareTo(s2); | -5 (빈 문자열 비교) | |||
String s1 = "banana"; String s2 = "apple"; | s1.compareTo(s2); | 1 | |||
12 | trim() | 문자열 앞뒤 공백을 제거 | String s = " hello world "; | s.trim(); | "hello world" |
String s = " hello "; | s.trim(); | "hello" | |||
String s = "noSpaces"; | s.trim(); | "noSpaces" | |||
String s = " "; | s.trim(); | "" (빈 문자열) | |||
13 | length() | 문자열의 길이를 반환 | String s = "hello"; | s.length(); | 5 |
String s = "hello world"; | s.length(); | 11 | |||
String s = ""; | s.length(); | 0 | |||
String s = " "; | s.length(); | 3 |
1. charAt(int index)
charAt 메서드는 문자열에서 특정 인덱스에 있는 문자를 반환하는 메서드입니다. 알고리즘 문제에서 문자열을 순회하며 특정 문자를 비교하거나 확인할 때 자주 사용됩니다. 예를 들어, 문자열에서 두 번째 문자를 가져오고 싶다면 charAt(1)을 사용하면 됩니다.
String s = "hello";
System.out.println(s.charAt(1)); // 출력: 'e'
이처럼 특정 위치의 문자를 쉽게 가져올 수 있지만, 인덱스가 범위를 벗어나면 IndexOutOfBoundsException 예외가 발생하니 주의해야 합니다.
2. substring(int, int)
substring 메서드는 문자열에서 원하는 부분을 잘라서 가져오는 데 사용됩니다. 알고리즘 문제에서 문자열을 부분적으로 잘라내야 할 때 유용하게 쓰이는데요, 특히 문자열을 분리하거나 특정 부분을 처리해야 할 때 자주 등장합니다.
예를 들어, "hello"라는 문자열에서 첫 번째부터 세 번째 문자까지 자르려면 다음과 같이 사용할 수 있습니다.
String s = "hello";
System.out.println(s.substring(1, 4)); // 출력: "ell"
또한, substring(0, 0)처럼 같은 인덱스를 넣으면 빈 문자열이 반환되며, 잘못된 범위(substring(4, 2))를 넣으면 예외가 발생합니다.
3. split(String regex)
split 메서드는 문자열을 특정 구분자로 나누어 배열로 반환합니다. CSV 파일 형식의 데이터를 다룰 때나, 문자열을 특정 구분자로 분리해야 하는 문제에서 많이 사용됩니다. 예를 들어, 콤마(,)로 나누는 작업을 할 때 다음과 같이 사용합니다.
String s = "apple,banana,cherry";
String[] fruits = s.split(",");
System.out.println(fruits[1]); // 출력: "banana"
이 외에도 공백으로 문자열을 나누거나, 빈 문자열이나 다양한 구분자로 나누는 경우도 많이 발생합니다.
4. indexOf(String str)
indexOf는 문자열 내에서 특정 문자열이 처음 등장하는 위치를 반환합니다. 문자열 검색 문제를 풀 때 자주 사용하는 메서드인데요, 예를 들어 "hello world"에서 "world"의 위치를 찾으려면 indexOf("world")를 사용할 수 있습니다.
String s = "hello world";
System.out.println(s.indexOf("world")); // 출력: 6
찾으려는 문자열이 없으면 -1을 반환합니다.
5. replace(CharSequence target, CharSequence replacement)
replace 메서드는 문자열에서 특정 부분을 다른 값으로 대체하는 데 사용됩니다. 알고리즘 문제에서 문자열을 특정 조건에 따라 변환해야 할 때 유용하게 쓰입니다. 예를 들어, "hello world"에서 "world"를 "Java"로 바꾸고 싶다면 다음과 같이 사용할 수 있습니다.
String s = "hello world";
System.out.println(s.replace("world", "Java")); // 출력: "hello Java"
대체할 문자가 여러 개 있을 경우도 모두 바뀌며, 대체할 대상이 없으면 원본 문자열을 그대로 반환합니다.
6. toCharArray()
toCharArray 메서드는 문자열을 문자 배열로 변환하는 메서드입니다. 알고리즘 문제에서 문자열을 배열처럼 처리해야 할 때 많이 쓰입니다. 특히 문자열을 하나씩 처리할 때 자주 사용됩니다.
String s = "hello";
char[] chars = s.toCharArray();
System.out.println(chars[1]); // 출력: 'e'
이 방법을 통해 문자열을 문자 배열로 변환한 후 반복문 등을 통해 처리할 수 있습니다.
7. equals(Object anObject)
equals 메서드는 두 문자열이 같은지 비교하는 메서드입니다. 알고리즘 문제에서 문자열 비교는 매우 자주 등장하는데요, == 연산자 대신 equals를 사용하는 것이 일반적입니다. equals는 내용이 같은지 비교하고, 대소문자를 구분하기 때문에 주의해야 합니다.
String s1 = "hello";
String s2 = "hello";
System.out.println(s1.equals(s2)); // 출력: true
같은 문자열이라도 대소문자가 다르면 false를 반환합니다.
8. compareTo(String anotherString)
compareTo는 두 문자열을 사전식으로 비교하는 메서드입니다. 문자열 정렬 문제나 순서 비교가 필요한 문제에서 자주 사용됩니다. 같은 문자열이면 0, 앞서면 음수, 뒤에 있으면 양수를 반환합니다.
String s1 = "apple";
String s2 = "banana";
System.out.println(s1.compareTo(s2)); // 출력: -1
9. trim()
trim 메서드는 문자열의 앞뒤 공백을 제거하는 데 사용됩니다. 입력 값의 앞뒤에 공백이 있을 때, 이를 제거하고 처리해야 할 때 많이 활용됩니다. 예를 들어, 입력 문자열에서 앞뒤 공백을 제거하고 싶은 경우 다음과 같이 사용합니다.
String s = " hello world ";
System.out.println(s.trim()); // 출력: "hello world"
10. length()
length 메서드는 문자열의 길이를 반환합니다. 배열이나 반복문을 처리할 때 문자열의 길이를 확인하는 것이 기본이죠.
String s = "hello";
System.out.println(s.length()); // 출력: 5
감사합니다.
'알고리즘' 카테고리의 다른 글
[Java] 문자열 다루기 - toCharArray 활용방법 및 예시코드 (0) | 2024.10.07 |
---|---|
[Java] 자바 PriorityQueue 우선순위큐 사용법 및 예제 (0) | 2022.05.14 |
[Java] 자바 Linked List 사용법 및 예제 (0) | 2022.04.27 |
최근댓글