더북(TheBook)

013 주어진 문자 제거

 

한 가지 해법은 JDK의 지원을 받아 String.replaceAll() 메서드를 활용하는 방법이다. 이 메서드는 주어진 정규식과 일치하는 주어진 문자열의 각 부분 문자열(문제에서는 각 문자)을 주어진 대체 문자열(문제에서는 빈 문자열인 "")로 대체한다.

public static String removeCharacter(String str, char ch) {
  return str.replaceAll(Pattern.quote(String.valueOf(ch)), "");
}

위 코드를 보면 정규식을 Pattern.quote() 메서드로 래핑했다. <(, [, {, \, ^, -, =, $, !, |, ], }, ), ?, *, +, ., > 같은 특수 문자를 이스케이프하기 위해서다. 대개 이 메서드는 명시된 문자열의 리터럴 패턴을 반환한다.

지금부터는 정규식을 쓰지 않는 해법을 살펴보자. StringBuilder를 활용하면 된다. 기본적으로 주어진 문자열의 문자를 순회하며 각 문자와 삭제할 문자를 비교하는 방식이다. 현재 문자와 삭제할 문자가 다를 때마다 현재 문자를 StringBuilder에 이어 붙인다.

public static String removeCharacter(String str, char ch) {
  StringBuilder sb = new StringBuilder();
  char[] chArray = str.toCharArray();

  for (char c : chArray) {
    if (c != ch) {
      sb.append(c);
    }
  }

  return sb.toString();
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.