Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) 정규식으로 문자열의 모음 일치시키는 방법 – 예제 코드 총정리

정규식(regular expression)에서 대괄호 [ ] 안에 일치시키려는 문자들을 묶어 지정할 수 있습니다. 즉, 메타 문자이자 하위 표현식인 [ ]는 그 안에 나열된 문자 중 하나와 일치합니다. 따라서 문자열에 포함된 모든 영어 모음을 찾으려면 아래와 같이 대괄호 안에 모음 글자들을 나열하기만 하면 됩니다.

[aeiouAEIOU]

위 패턴은 소문자 a, e, i, o, u와 대문자 A, E, I, O, U 중 어느 하나라도 입력 문자열에 등장하면 일치하는 것으로 처리합니다.

예제 1: Pattern과 Matcher 클래스 사용

java.util.regex 패키지의 Pattern 클래스로 정규식을 컴파일한 뒤, Matcher 객체의 find() 메서드를 호출하면 입력 문자열 안에 해당 패턴이 존재하는지 확인할 수 있습니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchVowels {
   public static void main( String args[] ) {
      String regex = "[aeiouAEIOU]";
      System.out.println("문자열을 입력하세요: ");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      // 정규식 컴파일
      Pattern pattern = Pattern.compile(regex);
      Matcher matcher = pattern.matcher(input);
      if(matcher.find()) {
         System.out.println("입력한 문자열에는 모음이 포함되어 있습니다.");
      } else {
         System.out.println("입력한 문자열에는 모음이 포함되어 있지 않습니다.");
      }
   }
}

실행 결과

문자열을 입력하세요:
hello how are you welcome
입력한 문자열에는 모음이 포함되어 있습니다.

예제 2: String.matches() 메서드 사용

별도의 Pattern, Matcher 객체 없이 String 클래스의 matches() 메서드만으로도 정규식 검사를 수행할 수 있습니다. 다만 주의할 점은 matches() 메서드가 문자열 전체가 정규식과 일치해야 true를 반환한다는 것입니다. 따라서 문자열 어디에든 모음이 존재하는지 확인하려면 아래와 같이 임의의 문자를 의미하는 .* 를 패턴 앞뒤에 붙여야 합니다.

import java.util.Scanner;
public class Test {
   public static void main( String args[] ) {
      String regex = ".*[aeiouAEIOU].*";
      System.out.println("문자열을 입력하세요: ");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      boolean result = input.matches(regex);
      if(result) {
         System.out.println("입력한 문자열에는 모음이 포함되어 있습니다.");
      } else {
         System.out.println("입력한 문자열에는 모음이 포함되어 있지 않습니다.");
      }
   }
}

실행 결과

문자열을 입력하세요:
hello how are you welcome
입력한 문자열에는 모음이 포함되어 있습니다.

핵심 정리

  • [aeiouAEIOU]: 대소문자 영어 모음 한 글자와 일치하는 문자 클래스입니다.
  • Matcher.find(): 문자열 내에 패턴이 하나라도 존재하면 true를 반환하므로 부분 일치 검사에 적합합니다.
  • String.matches(): 문자열 전체가 패턴과 일치해야 하므로, 부분 일치를 원한다면 .* 를 함께 사용해야 합니다.