오늘 프로그래머스 문제를 풀다가 문자열을 치환해주는 메서드를 검색해봤는데 replace() 라는 메서드를 발견해서 그걸로 답을 풀어낸 후 제출을 했다. 다른 사람의 풀이를 보니 replaceAll() 이라는 메서드를 사용한 것도 있어서 '이름은 같은데,,아예 다른 기능을 하는 메서드인가?' 라는 궁금증이 생겨 한 번 찾아보았다.
일단 문제는 문자로 입력된 영문 숫자명을 모두 숫자로 바꾸어 출력해주는 함수를 만드는 것이고, 그에 대한 풀이이다.
class Solution {
public static void main(String[] args) {
//테스트 코드
Solution solution = new Solution();
System.out.println(solution.solution("one45six"));
}
public int solution(String s) {
String[] num = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < 10; i += 1){
s = s.replace(num[i], Integer.toString(i));
}
int answer = Integer.parseInt(s);
return answer;
}
}
replace() 라는 메서드를 사용해서 문자열을 숫자문자열로 치환해주었다. 그런데 replaceAll() 이라는 메서드를 사용해도 결과는 동일하다. 둘의 차이점은 무엇일까? 아래 표는 Oracle API doc (Java SE 18) 에서 검색한 내용이다.
메서드 | 설명 |
public String replace(CharSequence target, CharSequence replacement) | 문자열 중에서, 지정된 대상 문자열(target)과 일치하는 문자열을 주어진 대체(replacement) 문자열로 바꿔 반환한다. |
String replaceAll(String regex, String replacement) | 문자열 중에서 주어진 정규 표현식(regex)과 일치하는 문자열의 각 부분 문자열을 주어진 대체(replacement) 문자열로 바꿔 반환한다. |
선언부의 매개변수명을 통해 두 메서드의 차이를 알 수 있다. replace() 는 특정 문자열을 새로운 문자열로 대체하기 위한 메서드이고, replaceAll() 은 정규식에 일치하는 문자열들을 전부 다른 문자열로 대체하기 위한 메서드인 것이다.
+ 본문과 다른 추가적인 개념 정리
1. CharSequence 란?
- 위에 나온 메서드들은 java.lang 이라는 패키지 안에 있는 String 이라는 클래스의 메서드이다. 하지만 CharSequence 는 클래스가 아닌 인터페이스이다. character + sequence 에서 짐작되듯이, char 값을 읽을 수 있는 시퀀스이다. 이 시퀀스를 implement 하여 구현된 대표적인 클래스로는 String, StringBuilder, StringBuffer 등이 있다.
- 자바에서 String 객체 내에 보관하는 문자열은 유니코드로 변형하여 보관하므로 HTML 고 같은 마크업 문자를 입력하고 출력할 때 문제가 발생한다. 따라서 String 객체에 입력되는 문자열은 마크업 문자를 입력하여 사용할 수 없는 문자열이다.
- 반면에 CharSequenct 객체 내에 보관하는 문자열은 같은 String 클래스와 유니코드라 하더라도 마크업 문자를 사용하여 변형과 가공이 가능한 문자열이다.
2. 정규식(Regular Expression, regex) 이란?
- 문자열에서 특정한 형태나 규칙을 가진 문자열을 찾아내기 위해 나타내는 패턴식이다. 예를 들어, 이메일 형태가 올바른지 체크하거나 아이디 형태가 올바른지, 특수문자가 들어있지는 않은지 등을 체크하기 위해 사용한다.
- 정규식은 . [] [^] ^ $ () \n * {} 등의 특수문자와 영문, 숫자 등의 조합으로 구성할 수 있다. 프로그래밍에서 자주 사용되는 기본 정규식은 아래와 같다.
**참고) 아래 사이트는 정규 표현식을 연습할 수 있는 사이트이다.
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
'TIL' 카테고리의 다른 글
JUnit5 살펴보기 (22.09.08 TIL) (0) | 2022.09.08 |
---|---|
Gradle 이란? (22.09.07 TIL) (0) | 2022.09.07 |
라이브러리와 프레임워크의 차이? (22.09.05 TIL) (1) | 2022.09.05 |
리프레쉬 하기 (22.09.04 TIL) (0) | 2022.09.04 |
페이스 유지하기 + getter 지양하기 (22.09.03 TIL) (0) | 2022.09.03 |
댓글