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();
}
}
myString.charAt(i).toLowerCase()
char 타입에는 toLowerCase() 메서드가 없다.
sb.append(Character.toLowerCase(myString.charAt(i)));
Character.toLowerCase(c)로 변환해준다.
두 번째 시도 (공백 누락)
문자열을 순회하면서 특정 문자에 대해 조건 분기 처리를 하던 중, String
안에 공백(띄어쓰기)이 포함되어 있을 경우 이를 따로 처리하지 않으면 결과 문자열에서 공백이 누락되는 문제가 발생했다.
초기에는 'a'
는 'A'
로, 나머지 문자는 소문자로 변환하는 로직만 있었기 때문에, 공백은 어느 조건에도 해당되지 않아 else
블록으로 빠지거나 무시되는 문제가 있었다.
이를 해결하기 위해, 공백(' '
)을 별도로 처리하는 조건문을 추가하였다. 공백일 경우 그대로 StringBuilder
에 추가되도록 else if (ch == ' ')
분기를 추가함으로써, 모든 공백이 누락 없이 유지되도록 하였다. 공백은 else
에서 처리하는 것이 아니라 명시적으로 분기 처리해주는 것이 코드 가독성과 정확성에 도움이 된다.