[coding] 코딩 공부하자/[개념정리]

[Java] String클래스에서 특수문자 구현(replaeAll, replace 주의사항 까지)

찰스_ 2023. 1. 27. 17:03
728x90
반응형

 

String(문자열) 클래스의 멤버함수 중 split, replaceAll, replaceFirst 등 정규식(regex) 문자열을 매개변수로 사용해야 할 경우들이 있다.

이러한 경우에 주의해야 할 점이 있는데, 매개변수가 정규식(regex) 문자열일 때 메타문자(정규표현식 또는 정규식을 제어할 수 있는 문자) 사용해야 할 경우 별도 표기방법이 있다.

 '이건 정규식 메타문자 아니고 그냥 특수문자로 사용할거야!'  라는 의미로 표시를 해줘야 컴퓨터가 이해(?)하고 정확하게 처리할 수 있다.

 

■ 메타문자 종류 및 설명  :  \\ (이스케이프 처리) 붙여줘야 하는 특수문자들

^ 문자열의 처음을 나타낸다. [] 한 문자를 가리키고 묶음 안의 내용은 가리키는 문자의 범위를 나타낸다.
$ 문자열의 끝을 나타낸다. {} 앞에 있는 문자의 개수를 나타내고 묶음 안에서 ','는 문자 개수의 범위를 나타낼 때 쓴다.
. (마침표) 임의의 한 문자를 나타낸다. () 괄호 안의 문자열은 하나로 묶어 취급한다.
* 바로 앞의 문자가 없거나 하나 이상이다. | 또는 (or)의 뜻으로 선택문에 쓰인다.
+ 바로 앞의 문자가 하나 이상이다. \ 메타 문자의 성질을 없앨 때 붙인다.
? 앞의 문자가 없거나 하나이다.  

 

■ 그냥 사용해도 괜찮은 특수문자들

! @ # % & ~
: ; < > , -

 

// 1. escape(이스케이프) 사용 예시
String hello = "안녕하세요?";
			
hello = hello.replaceAll("\\?", ".");
=> hello 치환 결과값(물음표→마침표) : 안녕하세요? → 안녕하세요.
			
hello = hello.replaceAll("\\.", "?");
=> hello 재치환 결과값(마침표→물음표) : 안녕하세요. → 안녕하세요?
			

// 2. escape 사용, 미사용 비교 예시
String hello2 	= "안녕하세요.";
String result2 	= "";
			
result2 = hello2.replaceAll("\\.", "!");
=> result2 결과값(eacape) : 안녕하세요. → 안녕하세요!
			
result2 = hello2.replaceAll(".", "!");
=> result2 결과값(not escape) : 안녕하세요. → !!!!!!

			
// 3. replaceAll(regex), replace(char) 차이점 비교 예시
String hello3 	= "헬로우. 하이. 안녕하세요.";
String repAll1 	= "";
String repAll2	= "";
String rep1 	= "";
String rep2 	= "";

repAll1	= hello3.replaceAll("\\.", "!");	// 올바른 예시 
repAll2	= hello3.replaceAll(".", "!");		// 잘못된 예시 
=> replaceAll 올바른 예시 : 헬로우. 하이. 안녕하세요. → 헬로우! 하이! 안녕하세요!
=> replaceAll 잘못된 예시 : 헬로우. 하이. 안녕하세요. → !!!!!!!!!!!!!!!

rep1	= hello3.replace(".", "!");		// 올바른 예시
rep2	= hello3.replace("\\.", "!");		// 잘못된 예시
=> replace 올바른 예시 : 헬로우. 하이. 안녕하세요. → 헬로우! 하이! 안녕하세요!
=> replace 잘못된 예시 : 헬로우. 하이. 안녕하세요. → 헬로우. 하이. 안녕하세요.

 

3번째 예시문 replaceAll(regex), replace(char) 멤버함수의 매개변수 위치와 형식은 아래 이미지 참고!

 

728x90
반응형