Character, String, StringBuilder 정리
2024. 11. 19. 16:25ㆍ코딩테스트/Java
Character, String, StringBuilder
- 모두 java.lang 패키지에 포함된 클래스.
- 자바의 기본적인 데이터 처리와 관련되어 있다.
- 자주 사용되는 클래스라 별도의 임포트 없이 바로 사용할 수 있다.
1. Character 클래스 관련 메서드
Character 클래스는 문자(char)를 다루는 데 유용하며, 검사나 변환에 자주 사용됩니다.
알파벳 및 숫자 검사
- Character.isLetter(char c): 문자가 알파벳인지 확인.
- Character.isDigit(char c): 문자가 숫자인지 확인.
- Character.isLetterOrDigit(char c): 문자가 알파벳 또는 숫자인지 확인.
대소문자 검사 및 변환
- Character.isUpperCase(char c): 문자가 대문자인지 확인.
- Character.isLowerCase(char c): 문자가 소문자인지 확인.
- Character.toUpperCase(char c): 소문자를 대문자로 변환.
- Character.toLowerCase(char c): 대문자를 소문자로 변환.
공백 및 특수 문자 검사
- Character.isWhitespace(char c): 문자가 공백인지 확인 (스페이스, 탭 등).
- Character.isSpaceChar(char c): 문자가 스페이스인지 확인.
- Character.isAlphabetic(int codePoint): 유니코드 기준으로 알파벳인지 확인.
- 참고: 아스키코드, 유니코드 : 대문자 65-90, 소문자 97-122, 둘의 차이는 32)
2. String 클래스 관련 메서드
문자열 길이와 인덱스
- s.length(): 문자열의 길이를 반환.
- s.charAt(int index): 특정 인덱스의 문자를 반환.
문자열 검색
- s.indexOf(String str): 문자열 str이 처음 나타나는 인덱스 반환. 없으면 -1.
- s.lastIndexOf(String str): 문자열 str이 마지막으로 나타나는 인덱스 반환.
- s.contains(CharSequence seq): 특정 문자열이 포함되어 있는지 확인.
- s.startsWith(String prefix): 특정 문자열로 시작하는지 확인.
- s.endsWith(String suffix): 특정 문자열로 끝나는지 확인.
문자열 비교
- s.equals(String anotherString): 두 문자열이 동일한지 확인.
- s.equalsIgnoreCase(String anotherString): 대소문자 구분 없이 문자열 비교.
- s.compareTo(String anotherString): 사전 순서로 문자열 비교.
대소문자 변환
- s.toUpperCase(): 문자열을 모두 대문자로 변환.
- s.toLowerCase(): 문자열을 모두 소문자로 변환.
부분 문자열 추출
- s.substring(int beginIndex): 시작 인덱스부터 끝까지 문자열 추출.
- s.substring(int beginIndex, int endIndex): 특정 구간의 문자열 추출.
문자열 분리와 결합
- s.split(String regex): 정규식을 기준으로 문자열 분리 (배열로 반환).
- String.join(CharSequence delimiter, CharSequence... elements): 문자열 배열을 특정 구분자로 결합.
공백 제거
- s.trim(): 문자열 양 끝의 공백 제거.
- s.strip(): 유니코드 기준으로 문자열 양 끝의 공백 제거.
문자열 수정
- s.replace(char oldChar, char newChar): 특정 문자를 다른 문자로 대체.
- s.replaceAll(String regex, String replacement): 정규식을 기준으로 문자열 대체.
- s.replaceFirst(String regex, String replacement): 정규식을 기준으로 첫 번째만 대체.
형 변환
- s.toCharArray(): 문자열을 문자 배열로 변환.
- String.valueOf(char[] data): 문자 배열을 문자열로 변환.
char[] chars = s.toCharArray(); // 문자열 → 문자 배열
String newString = new String(chars); // 문자 배열 → 문자열
- Integer.toString(int i), Double.toString(double d): 숫자를 문자열로 변환.
3. StringBuilder
StringBuilder 기본 특성
- 가변 문자열: StringBuilder 객체 내부의 문자열은 수정할 수 있다.
- 효율성: 문자열을 추가, 삭제, 변경할 때 새로운 객체를 생성하지 않아 메모리와 성능이 절약된다.
- 싱글 쓰레드 환경에서 사용: 멀티 쓰레드 환경에서는 동기화된 StringBuffer를 사용하는 것이 더 안전하다.
객체 생성
StringBuilder sb = new StringBuilder(); // 빈 객체 생성
StringBuilder sb2 = new StringBuilder("Hello"); // 초기값 지정
주요 메서드
- append(String str): 문자열 끝에 추가.
- insert(int offset, String str): 특정 위치에 문자열 삽입.
- delete(int start, int end): 시작 인덱스부터 끝 인덱스-1까지 문자열 삭제.
- deleteCharAt(int index): 특정 인덱스의 문자 삭제.
- reverse(): 문자열을 뒤집음.
- replace(int start, int end, String str): 특정 범위를 다른 문자열로 대체.
- length(): 현재 문자열의 길이 반환.
- capacity(): 내부 버퍼의 용량 반환 (자동으로 확장 가능).
- setCharAt(int index, char ch): 특정 인덱스의 문자를 변경.
- toString(): StringBuilder를 String으로 변환.
String vs StringBuilder 비교
특징 | String | StringBuilder |
불변성 | 불변(Immutable) - 한 번 생성되면 변경 불가 | 가변(Mutable) - 내용을 자유롭게 수정 가능 |
메모리 사용 | 문자열 변경 시 새로운 객체 생성 | 동일 객체 내에서 수정 |
성능 | 문자열 변경 작업이 많으면 느림 | 문자열 수정 작업에 최적화, 빠름 |
쓰레드 안전성 | 쓰레드 안전(Thread-safe) | 쓰레드 안전하지 않음 |
사용 시기 | - 변경이 적은 문자열 처리 - 짧고 간단한 작업 |
- 빈번한 문자열 추가/수정 - 반복문에서 성능 중요 |
- String을 사용하는 경우
- 문자열 값이 변경되지 않을 때.
- 코드가 간단하거나 문자열 수정이 드물 때.
- 작은 작업이나 불변성이 필요
- StringBuilder를 사용하는 경우
- 문자열을 빈번하게 수정하거나 조작할 때.
- 반복문에서 문자열 연결 작업이 많을 때.
- 효율성이 중요한 상황