[Java] 7. 코딩테스트 필수 String 함수 정리

김정란·2025년 6월 10일

Java

목록 보기
7/7

📋 목차

  1. 기본 정보 함수
  2. 문자 접근 함수
  3. 검색 함수
  4. 부분 문자열 함수
  5. 변환 함수
  6. 비교 함수
  7. 분할/결합 함수
  8. 문자열 수정 함수
  9. 정규식 함수
  10. 실전 활용 패턴

기본 정보 함수

length() - 문자열 길이

String str = "Hello";
int len = str.length(); // 5

// 코딩테스트 활용
if (str.length() == 0) { // 빈 문자열 체크
    return "empty";
}

isEmpty() - 빈 문자열 확인

String str = "";
boolean empty = str.isEmpty(); // true

// vs
str.length() == 0; // 같은 결과

문자 접근 함수

charAt(int index) - 특정 위치 문자 반환

String str = "Hello";
char first = str.charAt(0);    // 'H'
char last = str.charAt(str.length() - 1); // 'o'

// 코딩테스트 활용: 문자열 순회
for (int i = 0; i < str.length(); i++) {
    char c = str.charAt(i);
    // 처리 로직
}

toCharArray() - 문자 배열로 변환

String str = "Hello";
char[] chars = str.toCharArray(); // ['H','e','l','l','o']

// Enhanced for loop 사용 가능
for (char c : str.toCharArray()) {
    System.out.println(c);
}

검색 함수

indexOf() - 문자/문자열 위치 찾기

String str = "Hello World";
int pos1 = str.indexOf('o');        // 4 (첫 번째 'o')
int pos2 = str.indexOf("World");    // 6
int pos3 = str.indexOf('o', 5);     // 7 (5번째부터 찾기)
int notFound = str.indexOf('x');    // -1 (없으면 -1)

// 코딩테스트 활용: 문자 존재 여부 확인
if (str.indexOf("target") != -1) {
    // 문자열이 존재함
}

lastIndexOf() - 마지막 위치 찾기

String str = "Hello World";
int lastO = str.lastIndexOf('o');   // 7 (마지막 'o')

contains() - 문자열 포함 여부

String str = "Hello World";
boolean hasWorld = str.contains("World"); // true
boolean hasJava = str.contains("Java");   // false

// 코딩테스트에서 자주 사용
if (str.contains("target")) {
    // 처리 로직
}

부분 문자열 함수

substring() - 부분 문자열 추출

String str = "Hello World";
String sub1 = str.substring(6);     // "World" (6번째부터 끝까지)
String sub2 = str.substring(0, 5);  // "Hello" (0~4번째, 5는 미포함)

// 코딩테스트 활용: 문자열 분할
String left = str.substring(0, mid);
String right = str.substring(mid);

변환 함수

toLowerCase() / toUpperCase() - 대소문자 변환

String str = "Hello World";
String lower = str.toLowerCase();   // "hello world"
String upper = str.toUpperCase();   // "HELLO WORLD"

// 코딩테스트 활용: 대소문자 무시 비교
if (str1.toLowerCase().equals(str2.toLowerCase())) {
    // 대소문자 무시하고 같음
}

trim() - 공백 제거

String str = "  Hello World  ";
String trimmed = str.trim();        // "Hello World"

// 코딩테스트에서 입력 처리 시 자주 사용
String input = scanner.nextLine().trim();

valueOf() - 다른 타입을 문자열로 변환

int num = 123;
char c = 'A';
String str1 = String.valueOf(num);  // "123"
String str2 = String.valueOf(c);    // "A"

// 숫자를 문자열로 변환 (자주 사용)
String result = String.valueOf(answer);

비교 함수

equals() - 문자열 동등 비교

String str1 = "Hello";
String str2 = "Hello";
boolean same = str1.equals(str2);   // true

// ⚠️ 주의: == 는 참조 비교, equals()는 내용 비교

equalsIgnoreCase() - 대소문자 무시 비교

String str1 = "Hello";
String str2 = "HELLO";
boolean same = str1.equalsIgnoreCase(str2); // true

compareTo() - 사전순 비교

String str1 = "apple";
String str2 = "banana";
int result = str1.compareTo(str2);  // 음수 (apple < banana)

// 정렬에서 자주 사용
Arrays.sort(strings); // 기본적으로 compareTo() 사용

startsWith() / endsWith() - 시작/끝 문자열 확인

String str = "Hello World";
boolean starts = str.startsWith("Hello");  // true
boolean ends = str.endsWith("World");      // true

// 코딩테스트 활용: 접두사/접미사 체크
if (word.startsWith(prefix)) {
    // 처리 로직
}

분할/결합 함수

split() - 문자열 분할

String str = "apple,banana,cherry";
String[] fruits = str.split(",");   // ["apple", "banana", "cherry"]

// 공백으로 분할 (자주 사용)
String input = "1 2 3 4 5";
String[] numbers = input.split(" ");

// 정규식 사용
String data = "a1b2c3";
String[] parts = data.split("\\d"); // 숫자로 분할

join() - 문자열 결합 (Java 8+)

String[] words = {"Hello", "World", "Java"};
String joined = String.join(" ", words);    // "Hello World Java"
String csv = String.join(",", words);       // "Hello,World,Java"

// List와 함께 사용
List<String> list = Arrays.asList("a", "b", "c");
String result = String.join("-", list);     // "a-b-c"

문자열 수정 함수

replace() - 문자/문자열 교체

String str = "Hello World";
String replaced1 = str.replace('o', 'a');      // "Hella Warld"
String replaced2 = str.replace("World", "Java"); // "Hello Java"

// 코딩테스트에서 특정 문자 제거
String cleaned = str.replace("target", "");

replaceAll() - 정규식으로 교체

String str = "Hello123World456";
String onlyLetters = str.replaceAll("\\d", "");    // "HelloWorld" (숫자 제거)
String onlyNumbers = str.replaceAll("[^\\d]", ""); // "123456" (숫자만 남김)

// 공백 정리
String normalized = str.replaceAll("\\s+", " ");   // 연속 공백을 하나로

replaceFirst() - 첫 번째만 교체

String str = "apple apple apple";
String result = str.replaceFirst("apple", "orange"); // "orange apple apple"

정규식 함수

matches() - 정규식 패턴 매칭

String str = "12345";
boolean isNumber = str.matches("\\d+");        // true (모두 숫자)
boolean isEmail = email.matches(".+@.+\\..+"); // 간단한 이메일 형식

// 코딩테스트에서 형식 검증
if (input.matches("[0-9]+")) {
    // 숫자만 포함된 문자열
}

실전 활용 패턴

🔥 문자열 뒤집기

// 방법 1: StringBuilder 사용 (가장 효율적)
String str = "Hello";
String reversed = new StringBuilder(str).reverse().toString(); // "olleH"

// 방법 2: 직접 구현
StringBuilder sb = new StringBuilder();
for (int i = str.length() - 1; i >= 0; i--) {
    sb.append(str.charAt(i));
}
String reversed = sb.toString();

🔥 팰린드롬 확인

public boolean isPalindrome(String str) {
    String cleaned = str.toLowerCase().replaceAll("[^a-z0-9]", "");
    return cleaned.equals(new StringBuilder(cleaned).reverse().toString());
}

🔥 문자 개수 세기

public int countChar(String str, char target) {
    int count = 0;
    for (char c : str.toCharArray()) {
        if (c == target) count++;
    }
    return count;
}

// 또는 replace 사용
public int countChar(String str, char target) {
    return str.length() - str.replace(String.valueOf(target), "").length();
}

🔥 아나그램 확인

public boolean isAnagram(String s1, String s2) {
    if (s1.length() != s2.length()) return false;
    
    char[] chars1 = s1.toCharArray();
    char[] chars2 = s2.toCharArray();
    Arrays.sort(chars1);
    Arrays.sort(chars2);
    
    return Arrays.equals(chars1, chars2);
}

🔥 문자열을 숫자로 변환

// Integer 변환
String numStr = "123";
int num = Integer.parseInt(numStr);

// 안전한 변환 (예외 처리)
try {
    int num = Integer.parseInt(input);
} catch (NumberFormatException e) {
    // 숫자가 아닌 경우 처리
}

// Character to int (숫자 문자)
char c = '5';
int digit = c - '0';  // 5

💡 성능 팁

StringBuilder vs String 연결

// ❌ 비효율적 (새로운 String 객체가 계속 생성됨)
String result = "";
for (int i = 0; i < 1000; i++) {
    result += "a";
}

// ✅ 효율적
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append("a");
}
String result = sb.toString();

문자열 비교 최적화

// 길이가 다르면 빠른 return
if (str1.length() != str2.length()) {
    return false;
}

// null 체크
if (str1 == null || str2 == null) {
    return str1 == str2;
}

📝 외우면 좋은 핵심 함수들

// 필수 암기 리스트
str.length()                    // 길이
str.charAt(i)                   // 문자 접근
str.substring(start, end)       // 부분 문자열
str.indexOf(target)             // 위치 찾기
str.contains(target)            // 포함 여부
str.split(delimiter)            // 분할
str.replace(old, new)           // 교체
str.trim()                      // 공백 제거
str.toLowerCase()               // 소문자 변환
str.equals(other)               // 동등 비교
String.valueOf(obj)             // 문자열 변환
Integer.parseInt(str)           // 정수 변환

0개의 댓글