문자열을 정수로 변환해 주는 parseInt 메서드에 대해서 살펴보겠습니다.
parseInt(String s, int radix)
String s1 = "1001";
System.out.println("\\"1001\\" parseInt : " + Integer.parseInt(s1));
System.out.println("\\"1001\\" parseInt + radix : " + Integer.parseInt(s1, 2));
문자열 s를 int로 변환해주는 메서드입니다.
이 메소드를 사용하면 Integer가 아니라 int로 변환합니다.
radix는 진수값을 의미하며, 생략이 가능합니다.
radix를 지정해주는 경우 문자열 변수의 값을 radix에 해당하는 진수 값으로 판별하고 10진수로 변환합니다.
radix가 없는 경우, 10진수 형태의 문자열로 간주하고 정수로 변환합니다.
첫 번째는 1001을 그대로 정수로 변환하였고
두 번째는 1001을 2진수로 간주하여 정수 9로 변환하였습니다.
다시 설명하자면, radix를 넣어주면 문자열이 특정 진수 형태의 문자열이라는 것을 판별해서 10진수 정수로 변환해 주는 것입니다.
NumberFormatException 예외처리
parseInt로 변환하고자 하는 값을 숫자가 아닌 문자열을 인자로 사용하면 NumberFormatException이 발생합니다.
String s = "aaa";
try {
int parseInt = Integer.parseInt(s);
System.out.println("parseInt = " + parseInt);
} catch (NumberFormatException e) {
System.out.println("NumberFormatException !!");
}
parseInt 메소드를 try-catch 문으로 감싸면 NumberFormatException 예외를 잡을 수 있습니다.
parseUnsignedInt(String s, int radix)
String s2 = "1111";
System.out.println("\\"1111\\" parseUnsignedInt : " + Integer.parseUnsignedInt(s2));
System.out.println("\\"1111\\" parseUnsignedInt : " + Integer.parseUnsignedInt(s2, 2));
문자열을 부호 없는 정수로 변환합니다.
parseInt와 마찬가지로 radix는 생략이 가능합니다.
부호 없는 정수에 대해 부가 설명을 하자면, int의 범위는 약 -21억 ~ 21억입니다.
그런데 여기서 부호가 없으면 0부터 시작합니다.
그래서 부호없는 정수의 범위는 0부터 42억이 됩니다.
그래서 parseUnsignedInt의 인자로 들어온 문자열 s가 기존 정수의 범위를 넘는 경우 음수값을 반환합니다.
부호가 없기 때문에 문자열에 마이너스 기호가 있으면 NumberFormatException이 발생합니다.
그리고 부호 없는 정수의 최대값인 약 42억을 넘긴 값을 인자로 사용해도 해당 예외가 발생합니다.