Skip to main content

[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

방식

설명

속도/성능

char - '0'

아스키 코드 기반 연산, 계산 빠름

가장 빠름, 자주 사용

Character.getNumericValue()

유니코드 전 범위 숫자 대응 (로마 숫자 등 포함)

느림, 범용적이나 과함


4. 사용 시 주의할 점

  • 입력 문자열이 반드시 숫자로만 이루어져 있어야 한다 ("0123456789").
  • 알파벳, 공백 등이 포함된 경우 char - '0'은 잘못된 결과를 낼 수 있다.
  • 예외적 문자가 섞인 경우나 범용적인 처리를 원하는 경우 Character.isDigit(char)로 검사하거나 getNumericValue() 도 가능하지만 성능이 떨어질 수 있다.