Skip to main content

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();
    }
}
  1. my_string.charAt(i) == alpalpString 타입이라 char와 비교할 수 없다. alp.charAt(0)으로 바꿔야 한다.
  2. 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();
    }
}