Java에서는 문자열을 정수로 변화하기 위해서는 두가지 방법이 있다.
Interger.valueOf()
Interger.parseInt()
문자열을 기본형 정수(primitive type int)로 리턴
Integer.parseInt(String_varaible)
예를 먼저 보기 전에, 변환없이 문자열 값과 정수를 추가할 때 어떤일이 발생하는지 살펴보자.
class StrToInt {
public static void main(String[] args) {
String age = "10";
System.out.println(age + 20); //1020
}
}
age문자열 값이 "10"인 변수를 만들었다.
정수 값 20에 추가하면 30대신 1020이 된다.
하지만, parseInt()
를 쓴다면 값이 달라질 것이다.
class StrToInt {
public static void main(String[] args) {
String age = "10";
int ageToInt = Integer.parseInt(age);
System.out.println(ageToInt + 20); // 30
}
}
age
변수를 정수로 변환하기 위해 parseInt()
메서드에 매개변수로 전달하고 Integer.parseInt(age)
라는 변수에 저장했다. (ageToInt
)
그래서 결과값이 1020이 아닌 30으로 나왔다.
문자열이 유효한 숫자를 포함하지 않는다면 NumberFormatException
이라는 예외문구가 뜬다. 그렇게 때문에 문자열을 int로 바꿀때는 항상 try-catch문으로 코드를 감싸서 이 익셉션를 처리해야 한다.
Interger.parseInt()
를 써서 문자열을 int로 바꾸는 이 예시를 보자.
String str = "25";
try {
int num = Interger.parseInt(str);
System.out.println(num); // 25
}
catch(NumberFormatException ex) {
ex.printStackTrace();
}
이제 입력값에 유효하지 않은 정수를 대입해본다.
String str = "25T";
try {
int num = Interger.parseInt(str);
System.out.println(num); // 25
}
catch(NumberFormatException ex) {
ex.printStackTrace();
}
[결과값]
java.lang.NumberFormatException: For input string: "25T"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at OOP.StringTest.main(StringTest.java:51)
위에 있는 코드에서는 25T
를 정수로 변환하려고 한다. 이는 유효한 입력값이 아니다. 그렇게 때문에 NumberFormatException을 쓰로우하게 된다.
valueOf()
메서드는 parseInt()
메서드와 동일하게 작동한다.
정수로 변환할 문자열을 매개변수로 사용한다.
class StrToInt {
public static void main(String[] args) {
String age = "10";
int ageToInt = Interger.valueOf(age);
System.out.println(ageToInt + 20); // 30
}
}
valueOf()
에 전달하고 Interger.valueOf(age)
의 변수 ageToInt
에 저장되었다.ageToInt + 20
의 결과값은 1020이 아닌 30이 된다.String str = "25";
try {
int num = Integer.valueOf(str);
System.out.println(num); // 25
}
catch(NumberFormatException ex) {
ex.printStackTrace();
}
유효하지 않는 값을 넣었을 경우 위 Integer.parseInt() try-catch문 예시와 동일하다.