개발 공부/Java

형 변환 정리

gmelon 2022. 5. 17. 11:21

알고리즘 문제를 풀다보니 문제는 풀 수 있겠는데 형변환을 못해서 해결이 안 되는 문제가 꽤 많았다. 그래서 형 변환 문제에 봉착할 때마다 계속해서 추가하며 정리해보려고 한다.

String ↔ int

  • Integer의 static 메소드 parseInt, toString을 사용할 수 있다.

String → int

// 기본형
int i = Integer.parseInt(str); 
// str이 x진수로 작성되었다고 생각하고 int로 변환
int t = Integer.parseInt(str, x); 

int → String

String str = Integer.toString(i);

char ↔ int

  • 이 경우 (char), (int)로 간단하게 변환 가능
    • char로 변환하는 경우 int 값을 아스키코드로 인식하여 변환
    • int로 변환하는 경우 문자에 해당하는 아스키 코드 값을 반환

int ↔ float/double

  • 이 경우도 간단하게 (int)(float) / (double)로 변환이 가능하다
    • 정수에서 실수로 변환할 경우 float의 정밀도(7자리)가 낮다는 것을 고려해 값에 오차가 발생하지 않도록 유의해야 한다.
    • 실수에서 정수로 변환하는 경우 소수점 이하는 반올림 X, 절삭된다.

String ↔ char[]

  • String 클래스의 toCharArray, valueOf 메서드를 사용할 수 있다.

String → char[]

char[] arr = str.toCharArray();

char[] → String

char[] arr = {'h', 'y', 'u', 'n'};
String str = String.valueOf(arr); // "hyun"

int[] → String

  • 먼저 Arrays의 toString 메서드를 통해 “[1, 2, 3]”과 같은 형태로 만들고 replaceAll을 통해 공백과 기타 불필요한 문자를 지워준다.
int[] arr = {1, 2, 3};
// replaceAll -> 정규표현식 사용, 숫자와 공백을 제외한 모든 문자를 ""로 대체한다. (즉, 삭제한다)
String str = Arrays.toString(arr).replaceAll("[^0-9 ]", ""); // "1 2 3"
// 공백 없이 변환하고자 하는 경우, 숫자를 제외한 모든 문자를 ""로 대체한다.
String str = Arrays.toString(arr).replaceAll("[^0-9]", ""); // "123"

(22.06.03 추가)

  • 당연하지만, Arrays.toString(arr)이 아닌 arr.toString()을 사용하면 안 된다.
    • toString()을 사용하기 위해서는 오버라이딩이 필요하기 때문에 의도하지 않은 결과가 나온다.