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
반응형
'[coding] 코딩 공부하자 > [개념정리]' 카테고리의 다른 글
[Java] for문, for each문 비교(switch-case문 장점까지) (0) | 2023.01.12 |
---|