Skip to main content

34. [Java] A 강조하기 - Character.toLowerCase() vs String.toLowerCase()

https://school.programmers.co.kr/learn/courses/30/lessons/181874

  • 문자열 myString이 주어진다.
  • myString에서 알파벳 "a"가 등장하면 전부 "A"로 변환하고,
  • "A"가 아닌 모든 대문자 알파벳은 소문자 알파벳으로 변환해서 return

  • 1 ≤ myString의 길이 ≤ 20
  • myString은 알파벳으로 이루어진 문자열이다.

정답코드

class Solution {
    public String solution(String myString) {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < myString.length(); i++) {
            char ch = myString.charAt(i);

            if (ch == 'a') {
                sb.append('A');
            } else if (ch == 'A') {
                sb.append('A'); // 대문자 A는 그대로 유지
            } else if (ch >= 'B' && ch <= 'Z') {
                // A 제외 모든 대문자 소문자로 변환
                sb.append(Character.toLowerCase(ch));
            } else {
                // 소문자, 공백 등 기타 문자 그대로 유지
                sb.append(ch);
            }
        }
        return sb.toString();
    }
}
  • StringBuilder 생성
  • 입력 문자열 myString을 문자 단위로 순회
  • 각 문자에 대해 다음과 같이 처리:
    • 'a'인 경우 → 'A'로 변환하여 추가
    • ' ' (공백)인 경우 → 그대로 추가
    • 그 외 문자 → 모두 소문자로 변환하여 추가
  • 최종적으로 변환된 문자열을 반환
Character.toLowerCase()
  • Character.toLowerCase(char) 는 단일 문자에만 사용
  • String.toLowerCase() 는 문자열 전체 변환에 사용

Character.toLowerCase() 예제 (단일 문자 변환)

char ch1 = 'A';
char ch2 = Character.toLowerCase(ch1);  // 'a'

System.out.println(ch2);  // 출력: a

// 숫자나 특수문자는 변환되지 않고 그대로 반환
char ch3 = '9';
char ch4 = Character.toLowerCase(ch3);

System.out.println(ch4);  // 출력: 9

String.toLowerCase() 예제 (문자열 전체 변환)

String str = "HELLO WORLD";
String lowerStr = str.toLowerCase();

System.out.println(lowerStr);  // 출력: hello world

첫번째 시도 (컴파일 오류)

class Solution {
    public String solution(String myString) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < myString.length(); i++) {
            if (myString.charAt(i) == 'a') {
                sb.append('A');
            } else if (myString.charAt(i) >= 'A') {
                sb.append(myString.charAt(i).toLowerCase());
            }
        }
        return sb.toString();
    }
}

image.png

myString.charAt(i).toLowerCase()

char 타입에는 toLowerCase() 메서드가 없다.

sb.append(Character.toLowerCase(myString.charAt(i)));

Character.toLowerCase(c)로 변환해준다.


두 번째 시도 (공백 누락)

image.png

문자열을 순회하면서 특정 문자에 대해 조건 분기 처리를 하던 중, String 안에 공백(띄어쓰기)이 포함되어 있을 경우 이를 따로 처리하지 않으면 결과 문자열에서 공백이 누락되는 문제가 발생했다.

초기에는 'a''A'로, 나머지 문자는 소문자로 변환하는 로직만 있었기 때문에, 공백은 어느 조건에도 해당되지 않아 else 블록으로 빠지거나 무시되는 문제가 있었다.

이를 해결하기 위해, 공백(' ')을 별도로 처리하는 조건문을 추가하였다. 공백일 경우 그대로 StringBuilder에 추가되도록 else if (ch == ' ') 분기를 추가함으로써, 모든 공백이 누락 없이 유지되도록 하였다. 공백은 else에서 처리하는 것이 아니라 명시적으로 분기 처리해주는 것이 코드 가독성과 정확성에 도움이 된다.