Character, String, StringBuilder 정리

2024. 11. 19. 16:25코딩테스트/Java

Character, String, StringBuilder

  • 모두 java.lang 패키지에 포함된 클래스.
  • 자바의 기본적인 데이터 처리와 관련되어 있다.
  • 자주 사용되는 클래스라 별도의 임포트 없이 바로 사용할 수 있다.
  1.  

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 기본 특성

  1. 가변 문자열: StringBuilder 객체 내부의 문자열은 수정할 수 있다.
  2. 효율성: 문자열을 추가, 삭제, 변경할 때 새로운 객체를 생성하지 않아 메모리와 성능이 절약된다.
  3. 싱글 쓰레드 환경에서 사용: 멀티 쓰레드 환경에서는 동기화된 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) 쓰레드 안전하지 않음
사용 시기 - 변경이 적은 문자열 처리
- 짧고 간단한 작업
- 빈번한 문자열 추가/수정
- 반복문에서 성능 중요
  1. String을 사용하는 경우
    • 문자열 값이 변경되지 않을 때.
    • 코드가 간단하거나 문자열 수정이 드물 때.
    • 작은 작업이나 불변성이 필요
  2. StringBuilder를 사용하는 경우
    • 문자열을 빈번하게 수정하거나 조작할 때.
    • 반복문에서 문자열 연결 작업이 많을 때.
    • 효율성이 중요한 상황