티스토리 뷰
String 클래스에는 replace()와 replaceAll() 메서드가 존재하는데 일반 문자열 리터널로 해당 메서드를 실행하면 결과에 차이가 없다.
String str1 = " Java Programing ";
String str2 = " Java Programing ";
String result1 = str1.replace(" ","");
String result2 = str2.replaceAll(" ","");
System.out.println(result1); // JavaPrograming
System.out.println(result2); // JavaPrograming
위의 실행결과에서 볼 수 있듯, 두 메서드 모두 특정 문자열이 새로운 문자열로 대체된 결과를 반환한다.
왜 같은 기능을 하는 메서드가 두개나 있을까? 정확히 두 메서드가 어떤 기능을 하는지 살펴보자.
메서드 | 설명 |
String replace(CharSequence old, Char Sequence new) | 문자열 중의 문자열(old)을 새로운 문자열(new)로 모두 바꾼 문자열을 반환한다. |
String replaceAll(String regex, String replacement) | 문자열 중에서 지정된 문자열(regex)과 일치하는 것을 새로운 문자열(replacement)로 모두 변경한다. |
선언부의 매개변수명을 통해 두 메서드의 차이를 한눈에 알아볼 수 있다.
replace() 메서드는 매개변수명이 old, new로 되어있는 한편, replaceAll() 메서드는 매개변수명이 regex, replacement로 되어 있다.
replace()는 특정 문자열을 새로운 문자열로 대체하기 위한 메서드이며, replaceAll()은 정규식에 일치하는 문자열들을 전부 다른 문자열로 대체하기 위한 메서드인 것이다.
정규식
여기서 정규식(regular expression = regex)이란,
정규 표현식의 준말로 문자열에서 특정한 형태나 규칙을 가진 문자열을 찾아내기 위해 나타내는 패턴이다.
ex) 회원가입 시 고객이 입력한 이메일이 xxx@naver.com형태인지 체크, 아이디가 영문+숫자 조합인지 체크할 때 사용
정규식은 . [] [^] ^ () \ㅜ * {} 등의 특수문자와 영문, 숫자 등의 조합으로 구성할 수 있다. (정규식에 관한 자세한 내용은 다른 글을 참조,,) 프로그래밍에서 자주 사용되는 기본 정규식은 아래와 같다.
영어 | [a-zA-Z] |
숫자 | [0-9] |
영어+숫자 | [a-zA-Z0-9] |
이메일 | [a-zA-Z0-9]+@[a-zA-Z0-9]+ |
전화번호 | \d{2,3}-\d{3,4}-\d{4} |
주민등록번호 | \d{6}\-[1-4]\d{6} |
replace()와 replaceAll() + 정규식
처음 소스코드에 정규식을 추가하여 새롭게 테스트 해보자.
아래 소스코드는 각각 replace()와 replaceAll()을 사용하여 문자열에 포함된 영문자를 공백으로 대체한다.
// replace()
String str1 = "helloworld에 오신걸 welcome합니다";
String str2 = str1.replace("helloworld","").replace("welcome","");
System.out.println(str2); // 에 오신걸 합니다
// replaceAll()
String str3 = "helloworld에 오신걸 welcome합니다";
String str4 = str3.replaceAll("[a-z]","");
System.out.println(str4); // 에 오신걸 합니다
두 방법 모두 실행결과는 같지만, 위 조건에서 replace()를 이용한 방법은 프로그래밍적이지 못하다.
replace()는 특정 문자열을 대체할 때 (ex:제품명에서 "텔레비전"을 전부 "TV"로 변경),
replaceAll()은 특정 패텬의 문자열을 대체할 때 (ex:제품명에서 숫자를 전부 제거(=공백으로 대체)) 적합하다.
요약
replace() : 문자열 대치
replaceAll() : 문자열 대치 + 정규식 적용 가능
'Java > Java 기초' 카테고리의 다른 글
[Java] 자바 배열을 복사하는 다양한 방법 (깊은 복사, 얕은 복사) (0) | 2024.04.17 |
---|---|
[Java] 문자열 공백제거 (trim, replace) (0) | 2024.04.09 |
[Java] char 배열을 String 문자열로 변환하기 (0) | 2024.03.20 |
[Java] startsWith/endsWith (특정 문자로 시작하거나 끝나는지 체크) (0) | 2024.03.18 |
[Java] String, StringBuilder, StringBuffer의 차이 (0) | 2024.02.16 |
- Total
- Today
- Yesterday
- startsWith()
- 대소문자 변환
- 브라우저의 기본 구조
- 스코프
- SQLD
- 배열 만들기3
- n 번째 원소부터
- 배열만들기1
- Java
- nodelist
- SQL 개발자
- 블록스코프
- rep;ㅁce
- 프로그래머스 qr code
- 호이스팅
- Object.clone()
- 신입개발자 면접 준비
- 중첩스코프
- replaceAll
- StringBuilder
- 프로그래머스 세로 읽기
- replace와 replaceAll의 차이점
- 콜백 큐
- 프로그래머스
- 문자열 반복하기
- 엑셀 파일 추출
- Replace
- 마진과 패딩의 차이점
- useeffet
- 렌더링 과정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |