...
문자 → 숫자 형변환
String → Int
- Integer.parseInt() : 문자열 파싱하여 int 객체 생성
- Integer.valueOf() : 문자열로 Integer 객체 생성. 따로
initValue()로 int 형으로 형변환 필요
String str = "123456";
int num = Integer.parseInt(str);
String str2 = "123456";
int num2 = Integer.valueOf(str).initValue(); // 원래는 initValue() 를 써야하지만 안써도 자동 형변환이 일어나기 때문에 상관없음
NumberFormatException 예외처리
만일 숫자 형태가 아닌 문자열을 숫자로 변환할 때, NumberFormatException이 발생하게 된다.
앞으로 자주 보게될 에러메세지이니 잘 기억하자.
String str = "123456a";
int num = Integer.valueOf(str);
Exception in thread "main" java.lang.NumberFormatException: For input string: "123456a"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.valueOf(Integer.java:983)
at ConvertNumbersToString.main(ConvertNumbersToString.java:24)
따라서, 다음과 같이 NumberFormatException에 대한 예외처리를 해주면 안전하게 형변환 할 수 있다..
String str = "123456a";
int num;
try {
num = Integer.valueOf(str);
} catch (NumberFormatException e){
num = 0; // 숫자로 변환할수 없는 문자열 형태이면 0으로 초기화
}
String → Double & Float
- Float.parseFloat()
- Long.parseLong()
String s_num = "10.99";
// String -> Float
float f_num = Float.parseFloat(s_num);
float f_num2 = Float.valueOf(s_num);
// String -> Double
double d_num = Double.parseDoubles_num);
double d_num2 = Double.valueOf(s_num);
String → Long & Short
- Long.parseLong()
- Short.parseShort()
대부분 int형으로 변환하여 사용해서 잘쓰이진 않지만 Long, Short 클래스의 메소드로 변환 시켜줄 수 있다.
String s_num = "10";
// String -> Long
long l_num = Long.parseLong(s_num);
long l_num2 = Long.valueOf(s_num);
// String -> Short
short sh_num = Short.parseShort(s_num);
short sh_num2 = Short.valueOf(s_num);
숫자 → 문자 형변환
Int → String
- Integer.toString()
- String.valueOf() : String api에서 호출하는 방식
- int + "" : Casting 방식. 정수값에 빈문자열을 더하게 되면, 문자열 합치기 연산으로 처리되어 결과값도 문자열이 되게 된다.
int i_num = 10;
String s_num;
// 문자 -> 숫자
s_num = String.valueOf(i_num);
s_num = Integer.toString(i_num);
s_num = "" + i_num; // 정수값에 빈 문자열을 더해 문자열 합치기 연산으로 작동되게 한다
toString / valueOf 차이점
둘은 정수를 문자열로 변환해주는 똑같은 기능을 제공하지만, 만약 변환하고자 하는 값이 Null이라면 대응점이 다르게 된다.String.valueOf()는 우선 "null"이라는 문자열로 처리한다.
하지만 Integer.toString()은 "Null PointerException"이라는 오류를 발생시킨다.
따라서 만약 null 조차도 오류가 아닌 문자열로 처리해야 한다면 String.valueOf()를 그 외라면 Integer.toString()을 사용하면 된다.
Object nullValue = null;
String str;
str = nullValue.toString(); // NullPointerException 발생시킨다.
str = String.valueOf(nullValue); // 문자열 "null"가 된다.
Double & Float → String
- Double.toString()
- Float.toString()
- String.valueof()
float f_num = 10.10;
double d_num = 10.10;
String s_num;
// Float -> String
s_num = Float.toString(f_num);
s_num = String.valueOf(f_num);
// Double -> String
s_num = Double.toString(d_num);
s_num = String.valueOf(d_num);
Long & Short → String
- Long.toString()
- Short.toString()
- String.valueof()
short s_num = 10;
long l_num = 1000;
String s_num;
// short -> String
s_num = Short.toString(s_num);
s_num = String.valueOf(s_num);
// long -> String
s_num = Long.toString(l_num);
s_num = String.valueOf(l_num);
정수 ↔ 실수 형변환
Int → Double & Float
간단히 캐스팅을 통해 변환이 가능하다.
int i = 100;
// Int -> Float
float f = (float)i;
// Int -> Double
double d = (double)i;
Double & Float → Int
하지만 Float을 정수로 변환할때 주의할 점이 있다.
double은 (int)를 사용하여 캐스팅을 하면 된다.
하지만 float의 경우 예전에는 (int)를 사용하여 캐스팅을 하면 오류가 생긴다. (최근에 막힌것 같다)
따라서 float을 정수로 캐스팅하기 위해서는 Math메서드를 사용하여 반올림, 올림, 내림을 사용하여 정수형으로 바꾸거나, 아니면 먼저 double형으로 캐스팅을 하고 정수로 변환하는 수법을 써야 한다.
double d = 100.50;
Float f = 100.50f;
// Double -> Int
System.out.println("Double -> Int : " + (int) d);
// Float -> Int
System.out.println("Float -> Int : " + (int) f); // !! 오류 남 !!
System.out.println("Float -> Int : " + (int)(double) f); // 먼저 double형으로 변환하고 int 변환
System.out.println("Float -> Int : " + Math.round(f)); // 아예 반올림하여 정수로 변환
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.