String 객체의 불변성 특징
Java에서 String은 불변(immutable) 객체입니다. 한 번 생성된 문자열의 내용은 변경할 수 없으며, 모든 수정 연산은 새로운 String 객체를 반환합니다. 문자열 리터럴은 JVM의 String Pool에 저장되어 메모리 효율성을 높입니다.
String객체 생성 후 값 변경 불가 (참조 변수 재할당은 가능)- 모든 문자열 조작 메서드는 원본을 보존하고 새 객체 반환
- Java는 Unicode 기반으로
String과char표현 - 인코딩 변환 시
String과byte[]상호 변환 필요 - 바이트 배열 변환 시
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인 경우만 trueisBlank(): 길이가 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 bXYZdXYZXYZreplaceFirst(): 첫 일치 항목만 치환
String data = "cat catalog category";
System.out.println(data.replaceFirst("cat", "dog")); // dog catalog categoryreplaceAll(): 정규표현식 기반 전체 치환
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) | 지정 범위를 대상 배열에 복사 |