40. [Java] 특정한 문자를 대문자로 바꾸기
https://school.programmers.co.kr/learn/courses/30/lessons/181873
- 영소문자로 이루어진 문자열 my_string,
- 영소문자 1글자로 이루어진 문자열 alp가 매개변수로 주어질 때,
- my_string에서 alp에 해당하는 모든 글자를 대문자로 바꾼 문자열을 return
- 1 ≤ my_string의 길이 ≤ 1,000
정답코드
String.replace() 쓰면 한 줄로 간단하게 해결 할 수 있는 코드이다.
public String solution(String my_string, String alp) {
return my_string.replace(alp, alp.toUpperCase());
}
✅ String.replace();
자바에서 replace()
는 문자열에서 특정 문자나 문자열을 다른 걸로 바꿔주는 메서드이다.
원본 문자열은 그대로 두고, 새로운 문자열을 리턴한다.
String replaced = original.replace("old", "new");
"old"
→ 바꾸고 싶은 문자나 문자열"new"
→ 바꾼 후의 문자나 문자열original
은 원래 문자열replaced
는 바뀐 결과
오답
class Solution {
public String solution(String my_string, String alp) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i);
if (c == target) { // 에러 ❌
sb.append(c.toUpperCase()); // 에러 ❌
} else {
sb.append(c);
}
}
return sb.toString();
}
}
my_string.charAt(i) == alp
→alp
는String
타입이라char
와 비교할 수 없다.alp.charAt(0)
으로 바꿔야 한다.char
를 바로toUpperCase()
할 수 없다.String.valueOf(char).toUpperCase()
로 감싸야 한다.
아래와 같이 수정해 주었다
하지만 원래는 형변환을 하고 StringBuilder를 선언할 필요 없이 String.replace() 쓰면 코드 한 줄로 바로 해결된다. (위의 정답코드 참고)
/*
public String solution(String my_string, String alp) {
return my_string.replace(alp, alp.toUpperCase());
}
*/
class Solution {
public String solution(String my_string, String alp) {
StringBuilder sb = new StringBuilder();
char target = alp.charAt(0); // String → char ✔️
for (int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i);
if (c == target) {
sb.append(String.valueOf(c).toUpperCase()); // char → String ✔️
} else {
sb.append(c);
}
}
return sb.toString();
}
}