[Java] String → int[] 변환 : charAt(i) - '0'
문자열을 정수형 배열로 변환할 때 charAt(i) - '0'을 사용하는 이유
문자열에서 숫자 하나하나를 정수 배열로 변환할 때 가장 흔하게 사용하는 표현이 바로 charAt(i) - '0'
이다. 이 방식이 널리 쓰이는 이유는 간단하고 빠르며, 아스키(ASCII) 코드의 구조를 그대로 활용하기 때문이다.
필요하면 Character.getNumericValue(char)
도 사용 가능하지만 char - '0'
이 가장 빠르고 자주 사용된다.
1. 왜 char - '0'
인가? (아스키 코드 기반)
자바에서 String.charAt(i)
를 사용하면 char
타입, 즉 문자형을 반환한다.
이 char
는 내부적으로는 숫자(정수)로 처리되며, 이는 아스키(ASCII) 코드값이다.
예를 들어 :
System.out.println((int) '0'); // 48
System.out.println((int) '1'); // 49
System.out.println((int) '9'); // 57
즉, 문자 '0'
부터 '9'
까지는 아스키 값 기준으로 48~57이다.
따라서 어떤 숫자 문자가 있을 때 '0'
을 빼주면 실제 숫자 값이 된다.
char ch = '7';
int num = ch - '0'; // '7'은 아스키코드 55, '0'은 48 → 55 - 48 = 7
이렇게 계산된 num
은 정수 7
이다.
2. String → int[] 변환
public class CharToIntArray {
public static void main(String[] args) {
String str = "53921";
int[] numbers = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
numbers[i] = str.charAt(i) - '0';
}
System.out.println(Arrays.toString(numbers)); // [5, 3, 9, 2, 1]
}
}
3. Character.getNumericValue(char)
와 비교
char - '0'
말고도 아래와 같은 방법이 있으나 코테에서는 거의 사용하지 않는다.
실무나 코딩 테스트, 알고리즘 문제에서는 거의 항상 char - '0'
을 쓴다.
단, 문자가 반드시 '0'
~'9'
일 경우에만 안전하다.
int num = Character.getNumericValue('7'); // 결과: 7
방식 | 설명 | 속도/성능 |
---|---|---|
| 아스키 코드 기반 연산, 계산 빠름 | 가장 빠름, 자주 사용 |
| 유니코드 전 범위 숫자 대응 (로마 숫자 등 포함) | 느림, 범용적이나 과함 |
4. 사용 시 주의할 점
- 입력 문자열이 반드시 숫자로만 이루어져 있어야 한다 (
"0123456789"
). - 알파벳, 공백 등이 포함된 경우
char - '0'
은 잘못된 결과를 낼 수 있다. - 예외적 문자가 섞인 경우나 범용적인 처리를 원하는 경우
Character.isDigit(char)
로 검사하거나getNumericValue()
도 가능하지만 성능이 떨어질 수 있다.