2015년 7월 9일 목요일

자바(JAVA)에서 문자열을 숫자로 변환하기

 이전 포스트에서 설명한 포장형(wrapper class)의 생성자를 이용하면 문자열을 기본형 값으로 바꿀 수 있다.

[표 1] 포장형의 기본형 값을 반환하는 객체 메쏘드
메소드명
기능
byteValue()
byte값을 반환한다.
shortValue()
short값을 반환한다.
intValue()
int값을 반환한다.
longValue()
long값을 반환한다.
floatValue()
float값을 반환한다.
doubleValue()
double값을 반환한다.

예를 들어서 다음과 같이 Integer 형 객체에서 다양한 기본형 값을 얻을 수 있다.

package tut02;
public class Tut02 {
   public static void main(String[] args) {
       int ia = new Integer("1234567").intValue();
       float fa = new Integer("1234567").floatValue();
       short sa = new Integer("1234567").shortValue(); //(*)

       System.out.println(ia);
       System.out.println(fa);
       System.out.println(sa);
   }
}
실행 결과
1234567
1234567.0
-10617

위의 (*)에서와 같이 손실 변환(lossy conversion)의 경우에도 별다른 경고나 오류를 발생하지 않는다. 따라서 같은 형의 데이터의 변환에만 쓰는 것이 바람직하다.

 포장형으로 부터 기본형 값을 얻는 메소드로 parse 로 시작하는 정적 메소드들이 있다. 이 메소드를 이용하면 정수형을 반환하는 메소드는 기수를 지정해 줄 수도 있다.

[표 2] 포장형의 기본형 값을 반환하는 메쏘드
메소드명
기능
Byte.parseByte(String)
Byte.parseByte(String, radix)
문자열을 byte값으로 변환한다.
기수 radix인 문자열을 byte값으로 변환한다.
Short.parseShort(String)
Short.parseShort(String, radix)
문자열을 short값으로 변환한다.
기수 radix인 문자열을 short값으로 변환한다.
Integer.parseInt(String)
Integer.parseInt(String, radix)
문자열을 int값으로 변환한다.
기수 radix인 문자열을 int값으로 변환한다.
Long.parseLong(String)
Long.parseLong(String, radix)
문자열을 long값으로 변환한다.
기수 radix인 문자열을 long값으로 변환한다.
Float.parseFloat(String)
문자열을 float값으로 변환한다.
Double.parseDouble(String)
문자열을 double값으로 변환한다.

실제 프로그램에서는 주로 [표 2]의 정적 메소드를 자주 사용하게 된다.

package tut02;
public class Tut02 {
   public static void main(String[] args) {
       int ia = Integer.parseInt("1234567");
       int ib = Integer.parseInt("11110010",2); //이진수
       int ic = Integer.parseInt("1ab3f",16); //십육진수

       System.out.println(ia);
       System.out.println(ib);
       System.out.println(ic);
   }
}
실행 결과
1234567
242
109375

 포장형 객체를 반환하는 valueOf() 이라는 정적 메소드도 있다.

[표 3] 문자열로 부터 포장형 객체를 반환하는 메쏘드
메소드명
기능
Byte.valueOf(String)
Byte.valueOf(String,radix)
Byte.valueOf(byte)
문자열을 Byte 객체로 변환
기수 radix인 문자열을 Byte 객체로 변환한다.
byte값을 Byte 객체로 박싱
Short.valueOf(String)
Short.valueOf(String,radix)
Short.valueOf(short)
문자열을 Short 객체로 변환
기수 radix인 문자열을 Short 객체로 변환한다.
short값을 Short 객체로 박싱
Integer.valueOf(String)
Integer.valueOf(String,radix)
Integer.valueOf(int)
문자열을 Integer 객체로 변환
기수 radix인 문자열을 Interger 객체로 변환한다.
int값을 Interger 객체로 박싱
Long.valueOf(String)
Long.valueOf(String,radix)
Long.valueOf(long)
문자열을 Long 객체로 변환
기수 radix인 문자열을 Long 객체로 변환한다.
long값을 Long 객체로 박싱
Float.valueOf(String)
Float.valueOf(float)
문자열을 Float 객체로 변환한다.
float값을 FLoat 객체로 박싱
Double.valueOf(String)
Double.valueOf(float)
문자열을 Double 객체로 변환한다.
float값을 Double 객체로 박싱

예를 들어서

int ia = Integer.valueOf("1234567");

이렇게 하면 자동 언박싱이 일어나서 변수 ia에 1234567이란 값이 저장된다. 하지만 parseInt()함수보다는 당연히 성능이 떨어진다.

댓글 없음:

댓글 쓰기