알고리즘/Java

(Java) 문자의 배열과 아스키코드, StringBuilder 사용법

eunjineee 2023. 7. 20. 17:39

문자열이란?

문자열의 특징

문자의 배열

String.charAt(int index)    //주어진 인덱스에 있는 문자를 char형식으로 반환
String.toCharArray()        //모든 문자가 들어있는 char[]형식의 데이터 반환
구분 String.charAt(int index) String.toCharArray()
장점 문자 하나를 쉽게 가져올 수 있다. 모든 문자를 한 번에 가져올 수 있다.
단점 메서드 호출에 따른 오버헤드가 있다. 문자열 길이에 해당하는 메모리를 사용한다.
사용처 특정 몇 개의 문자만 필요할 때 사용한다. 문자열의 모든 문자 정보가 필요할 때 사용한다.

아스키 코드

숫자를 표현하는 문자의 아스키 코드

문자 '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'
아스키 코드 48 49 50 51 52 53 54 55 56 57

내장 라이브 러리 : Character.getNumericValue(digit)

문자를 정수로 바꾸는 방법

char digit = '9';
//문자에서 아스키코드를 빼면 해당 문자가 표현하는 정수 값이 나옴
int digitToInt = digit - '0';
//내장 라이브러리 이용
int digitToInt = Character.getNumericValue(digit);

대문자 ⇄ 소문자 바꾸는 방법

// 소문자 → 대문자

char lower = 'e';
//소문자와 대문자 차이 = 'a' - 'A'
char upper = (char) (lower + ('a'-'A'));
//내장 라이브러리 이용
char upper = Character.toUpperCase(lower);


// 대문자 → 소문자

char upper = 'G';
//소문자와 대문자 차이 = 'a' - 'A'
char lower = (char) (upper - ('a'-'A'));
//내장 라이브러리 이용
char lower = Character.toLowerCase(upper);

StringBuilder

String az = "";
for (char c = 'a'; c <= 'z'; c++) {
    az += c;
}
System.out.println(az); // "abcd..xyz"

▲ 문자열을 하나씩 이어 붙이는 형태의 코드

매번 새로운 문자열 객체 생성 + 새로운 문자의 배열 복사 (모든 원소를 참조) => 시간 복잡도 O(N²)

StringBuilder 클래스는 내부 배열에서 직접 수정 => 기대 시간 복잡도 O(1) = 시간 복잡도 O(N)

자주 사용되는 StringBuilder의 메서드

메서드 역할 시간 복잡도
StringBuilder.toString() 지금까지 구성한 문자열을 String 형식으로 반환한다. O(N)
StringBuilder.append(char c) 문자 c를 문자열 끝에 이어 붙인다. O(1)
StringBuilder.length() 지금까지 구성한 문자열 길이를 반환한다. O(1)
StringBuilder.reverse() 지금까지 구성한 문자열을 뒤집는다. O(N)

StringBuilder 사용 예시

'a'부터 'z'까지 문자열 이어붙이기

StringBuilder azBuilder = new StrinfBuilder();
for (char c = 'a'; c <= 'z'; c++){
    azBuilder.append(c);
}
String az = azBuilder.toString();
System.out.println(az);

각 반복문에서 O(1)의 시간 복잡도를 가지기 때문에 O(N) 시간이 걸림