본문 바로가기
Problem Solving/Algorithm Concepts

[Java Algorithm] 1-2 대소문자 변환(대문자는 소문자로, 소문자는 대문자로)

by 대범하게 2021. 8. 15.
반응형
// 대문자와 소문자가 같이 존재하는 문자열을 입력받아
// 대문자는 소문자로, 소문자는 대문자로 변환하는 프로그램
// 첫 줄에 문자열이 입력된다. 문자열 길이 100 안 넘음

import java.util.*;

public class Practice_02 {
	public String solution(String str) {
		String answer = "";
		
		for(char x : str.toCharArray()) {
			if(Character.isLowerCase(x)) answer+=Character.toUpperCase(x);
			else answer+=Character.toLowerCase(x);
		}

		return answer;
	}
	public static void main(String[] args) {
		Practice_02 T = new Practice_02();
		Scanner kb = new Scanner(System.in);
		String str = kb.next(); //문자열 입력받기
		System.out.println(T.solution(str)); 
	}
}

* 문제 설명

대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자를 대문자로 변환하여 출력하는 문제

 

* 소스코드1

import java.util.Scanner;

public class Main2{
	public String solution(String str) {
		String answer = "";
		
		for(char x : str.toCharArray()) {
			if(Character.isLowerCase(x)) {
				answer+=Character.toUpperCase(x); //누적이기 때문에 += 를 해준다!
			}
			else {
				answer+=Character.toLowerCase(x);
			}
		}
		return answer;
	}
	
	public static void main(String[] args) {
		Main2 T = new Main2();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		System.out.println(T.solution(str));
		kb.close();
	}
}

 

for each문 사용
for문 사용

 

* 추가공부1

1) for each문 (1-1 문자찾기에서도 for each문으로 해결가능)

  • for문의 기본형식 -> for(초기화식; 조건식; 업데이트식) 실행부분;
  • for each문의 형식 -> for(변수타입 변수이름 : 배열(혹은리스트)이름) 실행부분;
        //for문
        String[] numbers = {"one", "two", "three"};
    	for(int i = 0; i < numbers.length; i++) {
			System.out.println(numbers[i]);
		}
		
        //for each문
        String[] numbers = {"one", "two", "three"};
		for(String str : numbers) {
			System.out.println(str);
		}

for each문은 배열의 항목 수만큼 실행부분을 반복하며 반복이 이루어질 때마다 배열의 항목을 순서대로 꺼내어 변수에 자동으로 대입해준다. 따라서 인덱스 값을 알기 위해 사용하는 반복 변수(int i)를 선언하거나 배열[인덱스]부분이 필요없다. 배열이나 리스트, 제네릭타입에서 사용할 때 간편하게 사용할 수 있다.

 

위의 두 코드는 동일한 결과를 출력한다.

 

기본 for문을 사용할 때에는 인덱스로 배열의 요소에 접근하기 때문에 잠재적으로 Out of index Exception이 발생할 가능성이 높다. (예를 들어 배열의 길이를 벗어난 인덱스를 지정하는 경우) 

 

2) toCharArray()

  • String.toCharArray()문자열을 한 글자씩 쪼개서 이를 char타입의 배열에 집어넣어주는 메서드이다.
//how to use method
String str = "Hello World";
char[] charArr = str.toCharArray();

 

3) isLowerCase()/isUpperCase()

  • Character.isLowerCase(char ch)를 사용하여 소문자인지 구별한다. (인자로 전달된 문자가 대문자인 경우 true 반환, 소문자인 경우 false 반환)
  • Character.isUpperCase(char ch)를 사용하여 소문자인지 구별한다.

 

4) toLowerCase()/toUpperCase()

  • Character.toLowerCase(char ch)를 사용하여 대문자인지 구별한다. (인자로 전달된 문자를 대문자로 바꿔서 반환)
  • Character.toUpperCase(char ch)를 사용하여 소문자인지 구별한다.

(*나중에 참고하기 -> https://pathas.tistory.com/140)

 

5) String answer = "";  의 의미를 아직 정확히 설명할 수 없음!

 

 

 

* 소스코드2

import java.util.Scanner;

public class Main2{
	public String solution(String str) {
		String answer ="";
		
		for(char x : str.toCharArray()) {
			if(x >=97 && x <= 122) {
				answer+=(char)(x-32); //(char)를 해주지 않을 경우 숫자로 나옴!
			}
			else {
				answer+=(char)(x+32);
			}
		}
		return answer;
	}
	
	public static void main(String[] args) {
		Main2 T = new Main2();
		Scanner kb = new Scanner(System.in);
		String str = kb.next();
		System.out.println(T.solution(str));
		kb.close();
	}
}

 

* 추가공부2

대문자와 소문자의 아스키 코드의 차이가 32이다.

예를 들어, A 에서 a 로 만들려면 32를 더하고 반대의 경우엔 빼면 된다. 

 

알파벳 아스키 코드는 다음과 같다. 알파벳은 총 26개 문자로 되어 있음. 

A-65  Z-90 / a-97  z-122 

 

65<= char <=90 이면 대문자, 97<= char <= 122 이면 소문자이다. 

또는

'A'<= char <='Z' , 'a'<=char <'z' 

import java.util.Scanner;
 
public class Main {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        String input=sc.nextLine();
        
        char[] arr;
        arr= input.toCharArray();
        
        for(int i=0; i<arr.length; ++i){
            if(65<=arr[i] && arr[i]<=90){
                arr[i]=(char)(arr[i]+32);
                continue;
                }
            if (97<=arr[i] && arr[i]<=122){
                arr[i]=(char)(arr[i]-32);
                continue;
            }
            }
       
            System.out.print(arr);
        }
    }

* 위 소스코드 출처: https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=allkanet72&logNo=220866326350 

 


07/20 복습

 

반응형