본문 바로가기

프로그래밍/자료구조/알고리즘

자바로 문자열 정수를 int 형 정수로 변경하는 알고리즘



이번 포스팅에서는 String 형 정수를 int 형 정수로 변경하는 방법을 배워보겠습니다.

 

C언어서는 atoi 라는 함수를 통해 char[] 문자열을 정수로 바꿀 수 있고,

자바는 Integer 클래스에 parseInt 메서드를 통해 String 을 int 로 바꿀 수 있었습니다.

 

자 그럼 직접 parseInt 를 구현해보도록 하겠습니다.

 

우선 parseInt 를 직접 구현하기 앞서 아스키코드 와 String 이 어떻게 데이터를 내부적으로 저장하는지에 대해 

 

선행 지식이 필요합니다. (이미 포스팅을 해두었으니 참고 바랍니다.)

 참고 : http://globalbiz.tistory.com/81 (String 클래스 깊숙히 이해하기)

 

 

ex) String str = "12";

 

str 객체 에 담긴 12 문자열을 어떻게 int 형 변수에 12로 바꿔 저장할 수 있을까요?

 

원리는 간단합니다.

 

result = 0; //초기값

result = (result*10) + '1' - '0';

result = (result*10) + '2' - '0';

 

위 공식을 이용하시면 됩니다.

 

우리는 10진수 데이터를 얻어야 하기때문에 아스키코드를 오퍼레이션 하면 원하는 데이터를 얻을 수 있습니다.

 

result 초기값이 0 으로 가정하고 String 객체에 담긴 문자열 12 를 int형 정수로 바꿔보겠습니다.

 

result = (0*10) + 49 - 48 // 결과 1

result = (1*10) + 50 - 48 // 결과 12

 

즉 두번 연산째에 result 변수에는 12 값이 들어갑니다.

 

자 이제 소스코드를 보여드리겠습니다.

public static int atoi(String str) { int radix = 10; byte[] temp = str.getBytes(); int result = 0; for(int i=0;i<temp.length;i++) { if (temp[i] < '0' || temp[i] > '9') { // 0~9 넘어갈경우 (문자 방지) throw new NumberFormatException(); } result = (result*radix) + temp[i] - '0'; } return result; }

 

아스키코드 문자 0~9 를 넘어 가면 에러가 발생되는 점만 주의 해주시면 되겠습니다.

즉, 문자열에 숫자외 값은 허용하지 않습니다.