Java 문자와 숫자 비교 | 캐스팅 | 대문자 소문자 | 문자 빈도 수

2024. 11. 21. 14:02정보처리,전산/JAVA

반응형
 

 

 

 

  1. char x = 65;
    • Java에서 65는 ASCII 코드 값으로, 문자 'A'를 의미한다.
      따라서 변수 x는 문자 'A'로 초기화된다.
  2. System.out.println('Z' - 'A');
      • 'Z'의 ASCII 값: 90
      • 'A'의 ASCII 값: 65
      • 두 값의 차: 90 - 65 = 25
    • 출력 결과: 25
  3. System.out.println(x);
    • x의 값은 문자 'A'이다.
    • 출력 결과: A
  4. System.out.println((int)x);
    • x를 (int)로 캐스팅하면 'A'의 ASCII 값인 65가 출력된다.
    • 출력 결과: 65
  5. System.out.println((char)65);
    • 숫자 65를 (char)로 캐스팅하면 ASCII 값 65에 해당하는 문자 'A'가 출력된다.
    • 출력 결과: A
  6. System.out.println(x + 25);
      • x는 'A'이고, ASCII 값은 65이다.
      • 여기에 25를 더하면 65 + 25 = 90이 된다.
      • 결과는 정수로 출력된다.
    • 출력 결과: 90
  7. System.out.println((char)(x + 25));
      • x('A', ASCII 값 65)에 25를 더하면 90이 된다.
      • 이 값을 (char)로 캐스팅하면 ASCII 값 90에 해당하는 문자 'Z'가 출력된다.
    • 출력 결과: Z

 

 

 

char x = 65; // 'A'

System.out.println('Z' - 'A'); // 25
System.out.println(x);        // A
System.out.println((int)x);   // 65
System.out.println((char)65); // A
System.out.println(x + 25);   // 90
System.out.println((char)(x + 25)); // Z

요약 

  • ASCII 값과 문자:
    Java에서 문자는 내부적으로 숫자(ASCII 값)로 처리된다.
  • 캐스팅 활용:
    (char)와 (int)를 사용하여 문자와 숫자를 자유롭게 변환할 수 있다.
  • 연산 결과:
    문자와 숫자 간 연산에서 데이터 타입에 따라 결과가 다르게 표현된다.

 

 

 

public class Main {
    public static void main(String[] args) {
        String str = "HelloWorld"; // 입력 문자열

        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i); // 현재 문자
            
            // 대문자 -> 소문자로 변환
            if ('A' <= ch && ch <= 'Z') {
                int dist = ch - 'A'; // A로부터의 거리 계산
                char lowerAscii = (char) ('a' + dist); // 소문자 ASCII 값 생성
                System.out.print(lowerAscii);
            } 
            // 소문자 -> 대문자로 변환
            else if ('a' <= ch && ch <= 'z') {
                int dist = ch - 'a'; // a로부터의 거리 계산
                char upperAscii = (char) ('A' + dist); // 대문자 ASCII 값 생성
                System.out.print(upperAscii);
            } 
            // 알파벳이 아닌 경우 그대로 출력
            else {
                System.out.print(ch);
            }
        }
    }
}

 

 

 

코드 설명

  1. char ch = str.charAt(i);
    • 현재 위치의 문자를 가져온다.
  2. 대문자 → 소문자 변환 (if ('A' <= ch && ch <= 'Z'))
    • 현재 문자가 대문자인 경우, ASCII 값의 거리(dist)를 계산하여 소문자로 변환한다.
  3. 소문자 → 대문자 변환 (else if ('a' <= ch && ch <= 'z'))
    • 현재 문자가 소문자인 경우, ASCII 값의 거리(dist)를 계산하여 대문자로 변환한다.
  4. 알파벳이 아닌 경우 처리
    • 문자가 알파벳이 아닌 경우 그대로 출력한다.

 

 

 

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // 입력을 받기 위한 Scanner 객체 생성
        System.out.print("Enter a string: ");
        String str = sc.next(); // 문자열 입력 받기

        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i); // 문자열에서 각 문자를 가져옴

            // 대문자인 경우 소문자로 변환
            if ('A' <= ch && ch <= 'Z') {
                System.out.print((char) ('a' + (ch - 'A')));
            } 
            // 소문자인 경우 대문자로 변환
            else if ('a' <= ch && ch <= 'z') {
                System.out.print((char) ('A' + (ch - 'a')));
            } 
            // 알파벳이 아닌 문자는 그대로 출력
            else {
                System.out.print(ch);
            }
        }

        sc.close(); // Scanner 객체 닫기
    }
}

 

 

 

 

 

■ 대소문자를 구분하여 알파벳의 빈도수를 세고, 가장 많이 등장한 알파벳을 출력하는 프로그램

 

import java.util.Scanner;

public class Main {
    
    // 알파벳 빈도수 세는 메소드
    public static int[] getAlphabetCount(String str) {
        int[] count = new int[26];  // 알파벳 수에 맞는 배열
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if ('A' <= ch && ch <= 'Z') {
                count[ch - 'A']++;  // 대문자일 경우
            } else if ('a' <= ch && ch <= 'z') {
                count[ch - 'a']++;  // 소문자일 경우
            }
        }
        return count;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();  // 입력 문자열

        int[] count = getAlphabetCount(str);  // 알파벳 빈도수 배열 가져오기

        int maxCount = -1;  // 가장 많이 나온 알파벳의 개수
        char maxAlphabet = '?';  // 가장 많이 나온 알파벳

        // 알파벳의 빈도수 비교
        for (int i = 0; i < 26; i++) {
            if (count[i] > maxCount) {  // 더 많은 개수가 있을 때
                maxCount = count[i];
                maxAlphabet = (char) ('A' + i);  // 대문자 알파벳으로 변환
            } else if (count[i] == maxCount) {  // 개수가 동일한 경우
                maxAlphabet = '?';  // 다르면 '?'를 출력
            }
        }

        System.out.println(maxAlphabet);  // 결과 출력
        sc.close();
    }
}
 
 
count[ch - 'A']++; // 대문자일 경우
  • 대문자 알파벳일 경우, 해당 알파벳에 해당하는 인덱스를 계산하여 count 배열에서 그 인덱스의 값을 1 증가시킨다. , 'A'는 인덱스 0, 'B'는 인덱스 1이 된다.
 
 
maxCount 변수를 -1로 초기화하여 가장 많이 나온 알파벳의 빈도수를 저장할 변수로, 시작값을 -1로 설정하여 비교할 수 있도록 한다.
 
 
maxAlphabet 변수를 '?'로 초기화하 가장 많이 나온 알파벳을 저장할 변수로, 기본값을 '?'로 설정하여 동일한 빈도의 알파벳이 있을 때 '?'을 출력하도록 한다.
 

 

 

만약 count[i](i번째 알파벳의 빈도)가 maxCount보다 크다면, 즉 현재 알파벳이 이전의 가장 많이 나온 알파벳보다 더 많이 등장한 경우를 확인한다.

 

만약 count[i]가 maxCount와 같다면, 즉 동일한 빈도를 가진 알파벳이 여러 개 있는 경우를 확인한다.

 

  • 동일한 빈도를 가진 알파벳이 있으면, maxAlphabet을 '?'로 설정하여 가장 많이 나온 알파벳이 여러 개 있다는 것을 표시한다.
 
 
반응형