이번 포스트에서는 Character, String, StringBuilder에 대해서 정리해보겠습니다. 해당 포스트의 카테고리를 Java, 알고리즘에서 고민을 했는데 Character, String, StringBuilder의 주요 메소드와 시간복잡도를 함께 설명할 계획이기 때문에 알고리즘 카테고리로 선정하였습니다.
Character, String, StringBuilder
Java에서 문자열 및 문자 데이터를 처리할 때 주로 사용하는 클래스는 다음 세 가지입니다:
- Character: 문자(char) 하나를 다루는 클래스
- String: 불변(immutable) 문자열
- StringBuilder: 가변(mutable) 문자열, 성능 중심
Character
char 타입을 감싸는 래퍼 클래스이며, 문자 하나를 판단하거나 변환하는 데 주로 사용됩니다.
- char의 유틸리티 메서드를 제공합니다.
- 전부 static 메서드입니다.
- 기본 자료형 char를 대상으로 작동합니다.
Character.isLetter(char) | 문자인지 확인 | boolean |
Character.isDigit(char) | 숫자인지 확인 | boolean |
Character.toUpperCase(char) | 대문자로 변환 | char |
Character.toLowerCase(char) | 소문자로 변환 | char |
Character.getNumericValue(char) | 문자 '0'~'9'를 숫자로 변환 | int |
Character.isWhitespace(char) | 공백 문자 여부 확인 | boolean |
String
문자열을 나타내는 대표 클래스이며 불변(immutable) 합니다. 새로운 문자열을 만들지 않는 한 내부 값은 절대 바뀌지 않습니다.
- 문자열 연산이 많을수록 성능이 좋지않습니다.
- 불변성 덕분에 Thread-safe입니다.
- 문자열 조작 시 매번 새로운 객체를 생성합니다.
str.toUpperCase() | 전부 대문자로 변환 | O(n) |
str.toLowerCase() | 전부 소문자로 변환 | O(n) |
str.trim() | 앞뒤 공백 제거 | O(n) |
str.startsWith(String prefix) | 접두어 확인 | O(m) |
str.endsWith(String suffix) | 접미어 확인 | O(m) |
str.contains(String s) | 포함 여부 확인 | O(n) |
str.split(String regex) | 정규식 기준 문자열 분리 | O(n) |
str.substring(start, end) | 문자열 일부 추출 | O(end-start) |
str.equals(String s) | 문자열 비교 (내용 기준) | O(n) |
str.compareTo(String s) | 사전순 비교 | O(n) |
str.isEmpty() | 길이가 0인지 확인 | O(1) |
str.isBlank() | 공백으로만 구성됐는지 확인 | O(n) |
StringBuilder
가변(mutable) 문자열을 다루는 데 최적화된 클래스입니다. String보다 성능이 뛰어나며, 다량의 문자열 연산이 있을 때 사용합니다.
- 내부 배열을 사용해 문자열을 보관합니다.
- append, delete, insert 등 다양한 조작이 가능합니다.
- Thread-safe하지 않습니다. (StringBuffer는 Thread-safe)
new StringBuilder(String s) | 문자열로 초기화 | O(n) |
sb.append(String s) | 문자열 끝에 추가 | O(1) 암묵적 |
sb.insert(int offset, String s) | 특정 위치에 삽입 | O(n) |
sb.delete(int start, int end) | 범위 내 문자 삭제 | O(n) |
sb.setCharAt(int index, char c) | 특정 문자 변경 | O(1) |
sb.substring(int start, int end) | 문자열 추출 (String으로 반환) | O(end-start) |
sb.reverse() | 문자열 반전 | O(n) |
sb.length() | 길이 반환 | O(1) |
sb.toString() | String으로 변환 | O(n) |
(알고리즘에 자주 등장하는 클래스를 설명하였으므로, StringBuffer 클래스는 포스트에 포함하지 않았습니다.)
'알고리즘' 카테고리의 다른 글
비트마스킹 (40) | 2025.05.02 |
---|---|
[백준/Java] 11403 : 경로 찾기 (12) | 2025.02.20 |
[백준/Java] 23326 : 홍익 투어리스트 (4) | 2025.02.20 |
[백준/Java] 21939 : 문제 추천 시스템 Version 1 (4) | 2025.02.20 |
[백준/Java] 15681 : 트리와 쿼리 (14) | 2025.02.19 |