Java Conversion(char 타입변환)

이정연·2023년 6월 19일

자바기초

목록 보기
9/25

char에 대한 이해

  • char는 문자타입이다. 따라서 ''안에 단 하나의 문자만 할당할 수 있다.
  • 이 타입은 유니코드로 문자를 저장한다.
  • 유니코드는 각 문자에 숫자 코드 번호를 부여한 것인데, char letter1 = 'A'와 같이 문자형 리터럴을 문자형 변수에 할당하면 letter1에는 a의 유니코드 숫자값인 65가 저장된다.
  • 즉, ''안에 숫자를 넣으면 숫자에 해당하는 유니코드로 저장되고, 문자열을 넣으면 그문자열에 해당하는 유니코드로 저장된다.
char letter = 65;
System.out.print(letter); // 출력 결과 : A
  • 다음과 같이 숫자를 할당할 수 도있는데, 변수의 값을 읽어올 때 해당 변수가 저장하고있는 숫자값을 유니코드로 인식하여 그 유니코드와 일치하는 문자로 변환해서 출력해준다.
  • 그러니까 66을 저장하면 출력결과는 B가나온다.
  • 65~90 이 A~Z까지를 저장한다.
  • a는 97이다. b는 98....

char 타입을 int 타입으로 변환

Character class 안의 getNumericValue() 메서드를 이용한다.

public class Solution { 
	public int convertToNumber(char character) {
		int result;
		result = Character.getNumericValue(character);
		return result;
  }
}
---
char i = '9';
int j = Character.getNumericValue(i);

System.out.println(j); //9
  • char은 문자열을 하나씩밖에 저장할 수 없기 때문에 이것은 0~9까지만 가능하다.
  • char i = '9'; 로 저장하면 9에 해당하는 유니코드 57로 저장된다.
  • char i = 65; 로 저장한다면 숫자 그대로 저장한다. 대신 불러올때 65인 유니코드에 대응하는 문자를 불러온다.
  • char i = 'A';로 저장한다면, 결국 A는 유니코드 65이기때문에 65로 저장된다.(위랑 같다) 따라서 Character.getNumericValue(i); 로 불러올 때는 char i = 65;로 저장하나 char i = 'A';로 저장하나 똫같이 A로 불러온다.
  • 공식문서를 참조하면 getNumericValue() 메서드는 내부적으로 대소문자 구분없이 A를 10 Z를 35로 지정하고있다.
char i = 65;
int j = Character.getNumericValue(i);
System.out.println(j); //10
  • i는 65로 저장된다.
  • i를 getNumericValue() 메서드로 불러올 때 65인 유니코드에 해당하는 문자를 불러온다. 그게 A다
  • A는 getNumericValue() 메서드 규칙에따라 10으로 반환되어 나타난다.

-'0' 사용

public class Solution { 
  public int convertToNumber(char character) {
    int result;
    result = character - '0'; <---- 원래는 result = (int)(character - '0'); 임 자동타입변환이 적용됨
    return result;
  }
}
---
char i = '3';
System.out.println(i - '0'); <----- 원래는 System.out.println((int)(i - '0')); 임 자동타입변환 적용
  • char i = '3';은 0이 유니코드 48이니까 51로 저장된다.
  • 따라서 System.out.println(i - '0');System.out.println(51 - 48);이되어 3이 나오게되는것!

int 타입을 char 타입으로 변환

Character.forDigit(int digit, int radix) 메서드 이용

public class Solution { 
	public char convertToChar(int num) {
    char result;
    result = Character.forDigit(num, 36);
    
		return result;
  }
}
---
int i = 8;
char j = Character.forDigit(i, 16);
System.out.println(j);
  • forDigit() 메서드에 관하여 inteliJ의 공식 문서를 참조해 보았다.
public static char forDigit(int digit, int radix) {
        if ((digit >= radix) || (digit < 0)) {
            return '\0';
        }
        if ((radix < Character.MIN_RADIX) || (radix > Character.MAX_RADIX)) {
            return '\0';
        }
        if (digit < 10) {
            return (char)('0' + digit);
        }
        return (char)('a' - 10 + digit);
    }
  • 찾아보니 radix 의 범위는 2~36이다.
  • digit은 radix의 범위 사이어야 하며
  • digit이 10보다 작은 경우 '0'(유니코드로 48) 을 더하여 char로 나타낸다. 예를들어 digit이 7인경우 총 합52로 52에 해당하는 문자는 7이기때문에 7로 출력된다.
  • digit이 11인 경우, 'a' - 10 + digit 에서 'a' 는 97이다 97-10+11=98 이므로 유니코드 98은 b이다
int i = 11;
char j = Character.forDigit(i, 16);
System.out.println(j);
//b

+'0' 사용

public class Solution { 
  public int convertToNumber(char character) {
    int result;
    result = (char) (num + '0'); <-------- 데이터 크기가 큰 int 에서 char로 변환하는 작업이기 때문에 캐스팅이 필요함
    return result;
  }
}
---
int num = 9;
System.out.println((char)(num + '0'));
  • num + '0' 은 9+48 = 57이므로 유니코드 57에 해당하는 char를 반환한다. 따라서 9가 반환된다.
  • 그리고 이것은 0~9 에만 적용할 수 있다.
profile
반갑습니다.

0개의 댓글