* 오늘 코테를 보면서 문자열을 다루는 방법을 더 공부해야겠다고 생각이 들었다.
문자열은 가장 많이 사용되는 데이터 타입 중 하나로, 핵심 개념 + 자주 사용되는 메서드를 정리해보고자 합니다 !
1. 문자열 선언과 생성
자바에서 문자열을 선언하는 방법은 2가지가 있다.
(1) 리터럴 방식
String str1 = "Hello";
String str2 = "Hello"; // str1과 str2는 같은 객체를 참조
- 문자열 리터럴을 사용하면 String Pool에서 관리된다.
- 같은 문자열 리터럴을 다시 생성할 경우, 기존 문자열을 재사용한다.
(2) new 키워드 사용
String str3 = new String("Hello");
- new 키워드를 사용하면 Heap 메모리에 새로운 객체가 생성된다.
- 즉, "Hello"라는 값이 String Pool에 있더라도 새로운 인스턴스를 만든다.
비교
System.out.println(str1 == str2); // true (같은 참조)
System.out.println(str1 == str3); // false (다른 객체)
System.out.println(str1.equals(str3)); // true (값이 같음)
- == : 객체의 참조 주소 비교
- equals() : 문자열의 내용 비교
2. String 불변(Immutable) 특성
자바의 String 객체는 불변(immutable) 속성을 가진다.
즉, 문자열이 변경될 경우 새로운 객체가 생성된다.
String str = "Hello";
str = str + " World"; // 새로운 "Hello World" 객체 생성
-> 해결 방법 : 문자열을 자주 변경해야 할 경우, StringBuilder 또는 StringBuffer 사용을 고려해야한다.
3. 주요 문자열 메서드
// length() 문자열 길이 반환
"Hello".length(); // 5
// charAt(index) 특정 위치 문자 반환
"Java".charAt(1); // 'a'
// substring(start, end) 부분 문자열 추출
"Hello".substring(1, 4); // "ell"
// indexOf(str) 특정 문자열 위치 찾기
"Hello".indexOf("l"); // 2
// contains(str) 특정 문자열 포함 여부
"Java".contains("av"); // true
// toUpperCase() 대문자로 변환
"java".toUpperCase(); // "JAVA"
// toLowerCase() 소문자로 변환
"JAVA".toLowerCase(); // "java"
// trim() 앞뒤 공백 제거
" Hello ".trim(); // "Hello"
// replace(old, new) 문자열 대체
"apple".replace("a", "A"); // "Apple"
// split(regex) 특정 기준으로 문자열 나누기
"a,b,c".split(","); // ["a", "b", "c"]
문자열 조작 예시
String str = "Welcome my tistory";
System.out.println(str.toUpperCase()); // "WELCOME MY TISTORY"
System.out.println(str.substring(0, 7)); // "Welcome"
System.out.println(str.replace("tistory", "blog")); // "Welcome my blog"
4. 문자열과 숫자 변환
(1) 숫자를 문자열로 변환
int num = 123;
String str = String.valueOf(num); // "123"
String str2 = Integer.toString(num); // "123"
(2) 문자열을 숫자로 변환
String str = "123";
int num = Integer.parseInt(str); // 123
double dnum = Double.parseDouble("3.14"); // 3.14
- parseInt() 사용 시 "123a" 같은 숫자가 아닌 문자열을 변환하면 NumberFormatException 발생 !
5. StringBuilder vs StringBuffer
String 객체는 불변이므로 문자열을 자주 변경해야 할 경우, StringBuilder 또는 StringBuffer를 사용하면 성능이 향상된다.
(1) StringBuilder (비동기)
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb.toString()); // "Hello World"
- 특징 : 빠르고, 동기화 지원하지 않음. 단일 스레드 환경에서 유리하다.
(2) StringBuffer (동기)
StringBuffer sbf = new StringBuffer("Hello");
sbf.append(" World");
System.out.println(sbf.toString()); // "Hello World"
- 특징 : 멀티스레드 환경에서 안전하지만, 속도는 StringBuilder보다 느리다.
6. 문자열 포맷팅
(1) String.format() 사용
String name = "Alice";
int age = 25;
String formatted = String.format("이름: %s, 나이: %d", name, age);
System.out.println(formatted); // "이름: Alice, 나이: 25"
(2) printf() 사용
System.out.printf("이름: %s, 나이: %d\n", name, age);
- %s 문자열 / %d 정수 / %f 실수 / %c 문자
7. 문자열을 배열로 변환
(1) toCharArray() 사용
String str = "Hello";
char[] charArray = str.toCharArray();
System.out.println(Arrays.toString(charArray)); // ['H', 'e', 'l', 'l', 'o']
(2) split() 사용
String str = "apple,banana,grape";
String[] fruits = str.split(",");
System.out.println(Arrays.toString(fruits)); // ["apple", "banana", "grape"]
이번 글에서는 자바의 문자열(String)에 대해 찾아 정리해봤습니다.
문자열은 자주 사용하는 데이터 타입이므로, 자주 쓰이는 메서드와 개념을 익혀두면 실무와 코딩 테스트에서 유용하게 활용할 수 있습니다.
'알고리즘' 카테고리의 다른 글
| [TIL] 알고리즘 BFS & DFS 정리 (0) | 2025.09.23 |
|---|---|
| [TIL] 코딩테스트에서 Scanner 대신 BufferedReader를 써야 하는 이유 (1) | 2025.09.06 |
| 알고리즘 공부 정리 (3) | 2025.08.29 |
| 조합과 순열 : 개념부터 구현 방식까지 정리 (0) | 2025.05.05 |
| 알고리즘 문제 풀이 - BFS (1) | 2024.12.04 |