자바로 정규식을 사용해서 문자열에 특수문자가 포함되어있는지 여부와 정규식을 사용하여 문자열에 포함된 특수문자를 제거하는 방법을 설명드리겠습니다.
정규식 특수문자 포함 여부 체크 방법
특수문자가 정해져 있는 경우
!@#$%^&*같은 특수문자가 포함되어있는지 여부를 체크하려면 대괄호([]) 속에 체크하고자 하는 특수문자를 넣으면 됩니다.
그리고 Pattern 클래스와 Matcher 클래스를 사용해서 문자열이 지정한 정규식과 일치하는지 여부를 확인할 수 있습니다.
문자열에 특정 특수문자(!@#$%^&*)가 포함되어 있는지 여부를 체크하는 코드입니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
String str = "특수문자가 포함되어 있는 문자열!";
String regex = "[!@#$%^&*]"; // !@#$%^&*이 포함되어있는지 체크하는 정규식
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println("`" + str + "`에는 특수문자가 포함되어 있습니다.");
} else {
System.out.println("`" + str + "`에는 특수문자가 없습니다.");
}
문자열에 특정 특수문자(!@#$%^&*)가 포함되어 있는지 여부를 체크하는 코드입니다.
이런 방법으로 특수문자 포함 여부를 체크할 수 있지만, 다른 방법도 있습니다.
특수문자가 정해져 있지 않은 경우
특수문자의 수는 엄청 많기때문에 모든 특수문자를 정규식에 포함하기는 힘듭니다.
그래서 다음과 같은 방법을 사용해서 특수문자를 판별할 수 있습니다.
// 알파벳, 숫자, 한글을 제외한 모든 문자
String regex = "[^a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ]";
이 정규식은 알파벳, 숫자, 한글을 제외한 문자가 있는지 체크하는 정규식입니다.
이 정규식을 통과한다면 특수문자가 포함되어있다고 판단합니다.
다음과 같이 사용할 수 있습니다.
String str = "특수문자가포함되어있는문자열";
String regex = "[^a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println("`" + str + "`에는 특수문자가 포함되어 있습니다.");
} else {
System.out.println("`" + str + "`에는 특수문자가 없습니다.");
}
만약 공백은 특수문자로 간주하고 싶지 않다면 \\s를 추가하면 됩니다.
// 공백은 특수문자로 간주하지 않음
String regex = "[^a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ\\s]";
정규식으로 특수문자 제거
정규식을 사용해서 문자열에 포함된 특수문자를 제거하는 방법을 설명드리겠습니다.
String 클래스의 replaceAll 메소드를 사용하면 됩니다.
String str = "특~수!문@자#가 $포%함^되&어*있(는) 문{자}열;";
String regex = "[^a-zA-Z0-9가-힣ㄱ-ㅎㅏ-ㅣ\\s]"; // 알파벳, 숫자, 한글, 공백을 제외한 모든 문자
// 특수문자 제거
String replaceStr = str.replaceAll(regex, "");
System.out.println("replaceStr = " + replaceStr);
알파벳, 숫자, 한글을 제외한 문자가 모두 제거된 것을 확인할 수 있습니다.
읽으면 좋은 글
[Java] String - matches : 정규식 일치 여부 판별하기
[Java] String - replace, replaceAll : 다른 문자열로 대체하기
[Java] 정규식으로 괄호 안이나 특정 문자 사이 내용 추출, 제거 방법