Java String 클래스 핵심 기능과 활용법

String 객체의 불변성 특징

Java에서 String은 불변(immutable) 객체입니다. 한 번 생성된 문자열의 내용은 변경할 수 없으며, 모든 수정 연산은 새로운 String 객체를 반환합니다. 문자열 리터럴은 JVM의 String Pool에 저장되어 메모리 효율성을 높입니다.

  • String 객체 생성 후 값 변경 불가 (참조 변수 재할당은 가능)
  • 모든 문자열 조작 메서드는 원본을 보존하고 새 객체 반환
  • Java는 Unicode 기반으로 Stringchar 표현
  • 인코딩 변환 시 Stringbyte[] 상호 변환 필요
  • 바이트 배열 변환 시 UTF-8 인코딩 권장

문자열 선언 방식

쌍따옴표를 사용하여 문자열 리터럴을 직접 선언할 수 있습니다:

String msg = "안녕하세요 Java";

다양한 선언 예시:

String greeting = "반갑습니다";
String description;
description = "I love coding";
description = "<p>Hello World</p>";
description = "It\'s a beautiful day";
System.out.println(description);
String path = "C:\\Users\\Documents";

핵심 메서드 상세 분석

문자열 길이 확인

length() 메서드는 문자열의 문자 수를 반환합니다:

public class LengthDemo {
    public static void main(String[] args) {
        String domain = "www.example.com";
        int size = domain.length();
        System.out.println("도메인 길이: " + size);  // 출력: 15
    }
}

대소문자 변환

toLowerCase()toUpperCase()는 영문자의 대소문자를 변환합니다:

String sample = "Hello World 123";
System.out.println(sample.toLowerCase());  // hello world 123
System.out.println(sample.toUpperCase());  // HELLO WORLD 123

공백 제거

trim()은 문자열 양끝의 공백을 제거합니다. 단, 반각 공백만 제거되며 전각 공백(한글 공백)은 제거되지 않습니다:

String spaced = "  중요한 내용  ";
System.out.println(spaced.length());           // 11
System.out.println(spaced.trim().length());   // 7

전각 공백 처리를 위해서는 replace()로 먼저 변환:

spaced = spaced.replace((char) 12288, ' ');  // 전각 → 반각 변환
spaced = spaced.trim();

빈 문자열 검증

Java 11부터 제공하는 isBlank()isEmpty()의 차이:

  • isEmpty(): 길이가 0인 경우만 true
  • isBlank(): 길이가 0이거나 공백 문자로만 구성된 경우 true

타입 변환

기타 타입 → String

String.valueOf(2024);        // "2024"
String.valueOf(3.14159);     // "3.14159"
String.valueOf(false);       // "false"

String → 기타 타입

int num = Integer.parseInt("256");
int hex = Integer.parseInt("ff", 16);  // 255

// String ↔ char[] 변환
char[] arr = "Sample".toCharArray();
String restored = new String(arr);

부분 문자열 추출

substring() 메서드는 두 가지 형태로 제공됩니다:

String text = "오늘은 즐거운 월요일";

// 단일 인자: 시작 인덱스부터 끝까지
text.substring(4);        // "즐거운 월요일"

// 이중 인자: 시작 인덱스부터 종료 인덱스 직전까지 (begin ≤ index < end)
text.substring(4, 7);     // "즐거운"

실제 활용 예시:

public static void main(String[] args) {
    String dateStr = "2024-03-15-Event";
    System.out.println(dateStr.substring(0));      // 전체 문자열
    System.out.println(dateStr.substring(5));      // 03-15-Event
    System.out.println(dateStr.substring(8, 13));  // 15-Ev
}

문자열 치환

replace(): 모든 일치 항목 치환

String original = "banana bandana";
System.out.println(original.replace("na", "XYZ"));  // bXYZXYZ bXYZdXYZXYZ

replaceFirst(): 첫 일치 항목만 치환

String data = "cat catalog category";
System.out.println(data.replaceFirst("cat", "dog"));  // dog catalog category

replaceAll(): 정규표현식 기반 전체 치환

String numbers = "Tel: 010-1234-5678";
System.out.println(numbers.replaceAll("\\d", "*"));  // Tel: ***-****-****

문자열 검색

indexOf(): 앞에서부터 검색

String source = "programming is fun";
source.indexOf('g');           // 3
source.indexOf("is");          // 12
source.indexOf('g', 5);        // 10 (5번 인덱스 이후)

lastIndexOf(): 뒤에서부터 검색

source.lastIndexOf('g');       // 15
source.lastIndexOf('g', 10);   // 10 (10번 인덱스 이전)

charAt(): 특정 위치 문자 추출

String alphabet = "ABCDEFG";
alphabet.charAt(0);  // 'A'
alphabet.charAt(3);  // 'D'

String 클래스 기능 분류 정리

정보 획득

메서드설명
length()문자열 길이 반환
charAt(int idx)지정 인덱스의 문자 반환
indexOf(int/Str)처음 등장 위치 반환
lastIndexOf(int/Str)마지막 등장 위치 반환
substring(int, int)부분 문자열 추출

비교 및 검증

메서드설명
equals(Object)내용 동등 비교 (대소문자 구분)
equalsIgnoreCase(String)대소문자 무시 비교
contains(CharSequence)특정 시퀀스 포함 여부
startsWith(String)지정 문자열로 시작 여부
endsWith(String)지정 문자열로 종료 여부
isEmpty()길이 0 여부

형태 변환

메서드설명
toLowerCase()소문자 변환
toUpperCase()대문자 변환
trim()양끝 공백 제거
toCharArray()문자 배열 변환
getBytes()바이트 배열 변환
concat(String)문자열 연결

기타 유틸리티

메서드설명
compareTo(String)사전 비교 (대소문자 구분)
compareToIgnoreCase(String)사전순 비교 (대소문자 무시)
intern()String Pool의 canonical 표현 반환
contentEquals(StringBuffer)StringBuffer와 내용 비교
copyValueOf(char[])문자 배열을 문자열로 변환
getChars(int, int, char[], int)지정 범위를 대상 배열에 복사

태그: java String immutable unicode utf-8

7월 12일 19:06에 게시됨