이번 포스팅에서는 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 를 넘어 가면 에러가 발생되는 점만 주의 해주시면 되겠습니다.
즉, 문자열에 숫자외 값은 허용하지 않습니다.
'프로그래밍 > 자료구조/알고리즘' 카테고리의 다른 글
반복되지 않는 첫 번째 문자찾기 (0) | 2014.11.13 |
---|---|
2개의 스택(Stack) 을 이용하여 큐(Queue) 만들기 (0) | 2014.11.12 |
자바로 구현하는 큐 (Queue) (0) | 2014.10.24 |
자바로 구현하는 스택 (Stack) - 1차 수정 (3) | 2014.10.24 |
트리 (Tree) (0) | 2014.10.18 |