Study/Java

Java: 아스키코드, Char, String 변환과 응용

devyoseph 2021. 10. 10. 03:07

아스키코드

미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있다.

A: 65번 / a: 97번

 

아스키 코드의 활용

아스키 코드는 개념 정도만 짚고 넘어가고 이 포스팅에서는 변환을 다룬다

1) String은 Char로 쪼갤 수 있고 각각의 Char은 아스키 코드로 변환 가능하다

2) 아스키 코드를 반복문 등에 넣어 문자를 이용한 조건문을 만들 수 있다

 

 

1) String Char 변환 (String to Char)

굳이 String에서 Char을 변환해야 하는가 싶지만 Scanner, BufferedReader 등

사용자가 값을 입력하는 문자열 데이터는 대부분 String 타입이다

StringChar의 차이점은 String은 연속적, Char은 단일 문자라는 것이다

이로 인해 String → Char로 변환할 때 선택지가 주어진다

 

1) String에서 한 글자만 가져온다

charAt(index);로 String에서 특정 순번의 글자만 가져올 수 있다

 

2) String에서 여러 글자를 다 가져온다

toCharArray();로 모든 String의 글자를 Char배열에 집어넣는다

String → Char
.charAt(); 한 글자만 가져오기 Scanner sc = new Scanner(System.in);
int num = sc.next().charAt(0);
.toCharArray(); 모든 글자 Char 배열에 넣기 Scanner sc = new Scanner(System.in);
char[] num = sc.next().toCharArray();
//BufferedReader를 이용한 String to Char
   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      	  char N = br.readLine().charAt(0);
//사용자에게 받은 문자의 0번 index를 N 변수에 저장
          System.out.println(N);
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          char[] arr = br.readLine().toCharArray();
//사용자에게 받은 문자를 모두 arr 배열에 넣기
          System.out.println(arr);

 

2) Char 아스키코드 변환 (Char → ASCII)

String에서 변환한 Char 데이터를 ASCII로 나타내는 방법은 다음과 같다

1) Char의 글자를 int로 형 변환한다

2) byte로 형변환할 수 있지만 수가 커지면 byte에서 다시 형변환하는 사태가 발생한다

Char  ASCII
char을 숫자 데이터로 변환 장점 단점
 int num = N; //num으로 숫자를 가져온다 int는 형변환 연산자: (int)가 필수가 아니다 약간의 데이터 낭비가 일어난다
 int num = (byte)N; ASCII가 127번까지 존재해 데이터가 딱 맞다 형변환연사자: (byte)를 써주어야 한다
// 1)번
import java.io.*;

public class Main {
public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	   		 char N= br.readLine().charAt(0);
	          int num = N;
	          System.out.println(num);
	}
}
// 2)번
import java.io.*;

public class Main {
public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	   		 char N= br.readLine().charAt(0);
	         byte num = (byte)N;
	          System.out.println(num);
	}
}

 

3) Char의 숫자를 진짜 숫자로 변환 (Char → Int)

위에서 살펴본 Char의 변환은 비교적 간단했다

오히려 Char의 문자데이터의 숫자를 진짜 숫자로 변환하는 것에 메소드를 사용한다

Char → Int
Character.getNumericValue(); int N = Character.getNumericValue(N2.charAt(2));

*백준 예시 2번째 참고

 

응용 - 백준 아스키 코드

1) 알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.

import java.io.*;

public class Main {
public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	      	  byte num= (byte)br.readLine().charAt(0);
	          System.out.println(num);
	}
}

 

2) N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

//Char배열
import java.io.*;

public class Main {
public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	   		  int N= Integer.parseInt(br.readLine());
	   		  char[] arr = new char[N];
	   		  int sum = 0;
	   		  arr = br.readLine().toCharArray();
	          for(int i = 0; i<N; i++) {
	        	  sum += Character.getNumericValue(arr[i]);
	          }
	          System.out.println(sum);
	}
}
//String
import java.io.*;

public class Main {
public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	   		  int N= Integer.parseInt(br.readLine());
	   		  String N2 = br.readLine();
	          int sum =0;
			for(int i = 0; i<N; i++) {
	        	  sum  += Character.getNumericValue(N2.charAt(i));
	          }
	          System.out.println(sum);
	}
}

 

3) 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서,단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
	   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	   		 String N= br.readLine();
	         char start = 'a';
	         for(int i =0; i<26; i++) {
	        	 System.out.print(N.indexOf((char)(start+i))+" ");
//start를 지정하지않고 97을 넣어도 된다
	         }
	}
}