출처:백준
사고과정 : 사용자로부터 입력값을 받고 그 값을 아스키 코드로 변환해서 리턴을 해줘야 할 것 같은데 아스키코드로 변환하는 방법을 모르겠다..
수정 전 코드
import java.util.Scanner;
public class b11654 {
public static void main(String[] args) {
Scanner sc = new Scanner(); // Scanner로 사용자로부터 알파벳 소문자,대문자,숫자 0-9 중 입력받기
String s = sc.next(); // 사용자가 입력한 값 string형으로 s 변수에 저장하기
// 아스키로 변환
s.ascii();
}
}
수정 후 코드
import java.util.Scanner;
public class b11654 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Scanner로 사용자로부터 알파벳 소문자,대문자,숫자 0-9 중 입력받기
int s = sc.next().charAt(0); // String에서 char로. 문자열을 잘라 문자로 변환한다.
// int 타입 변수에 저장함으로써 문자에 대응되는 값. 즉 아스키 코드값을 저장한다.
System.out.println(s);
}
}
1.Scanner에서 System.in은 왜 또 안쓴거지..
2.그리고 string형으로 sc.next()를 하는 건 맞았지만 우리가 원하는 것은 아스키 코드가 반환되는 '정수값'이므로 int형으로 바꿔주어야 한다.
3.charAt()은 문자열을 잘라 문자로 변환하는데
sc.next().charAt(0)의 의미는 sc.next() 문자열에서 0번째에 있는 문자를 가리키는 것이다. 그리고 그것을 int형으로 바꿔 s 변수에 넣는 것이다.
참고 ) Java는 String을 처리할 때 내부(메모리 상)에서는 UTF-16 BE 인코딩으로 문자열을 저장하고, 송수신에서는 직렬화가 필요한 경우 변형된 UTF-8을 사용하여 문자열을 입/출력할때만 사용자가 지정한 인코딩 값 또는 운영체제의 기본 인코딩 값으로 문자열을 인코딩한다.
만약에 Ecplise의 File 인코딩이 UTF-8이라면
입력(UTF-8) > 송수신(변형된 UTF-8) > 자바 메모리(UTF-16) > 송수신(변형된 UTF-8) > 출력(UTF-8)