ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pattern
    JAVA 2022. 2. 15. 14:25

    <피드백 언제나 환영합니다! 댓글 감사합니다>

    java 에서 정규표현식을 사용하려면 반드시 알아야하는 Pattern, Matcher Class가 있습니다. (JDK 17 사용)

    제가 사용해 보면서 꼭 필요한 기준으로 정리하려 합니다.

    먼저, 사용하기에 앞서 정규식 표현방법을 알아야 합니다.

    Pattern Class

    정규 표현식에 대상 문자열을 검증하는 기능으로 일치 불일치로 true, false를 반환합니다.

    주로 검증에 활용 됩니다.

    Matcher Class

    Pattern Class를 받아 대상 문자열과 패턴이 일치하는 부분을 찾거나 전체일치 여부등을 판별하기위해 사용됩니다.

    활용

    먼저 코드와 코드 결과를 본후 이어 설명하겠습니다

    public class Main {
    
        public static void main(String[] args) {
            String operator = "[+*/-]";
            String number = "[0-9]+";
            String value = "123+456";
    
            Pattern operatorCompile = Pattern.compile(operator);
            Matcher operatorMatcher = operatorCompile.matcher(value);
            String[] split = operatorCompile.split(value);
    
            for (String s : split) {
                System.out.println("split = " + s);
            }
    
            boolean isValid = operatorMatcher.find();
            if (isValid) {
                System.out.println("operatorMatcher = " + operatorMatcher.group());
            }
    
            Matcher numberMatcher = Pattern.compile(number).matcher(value);
            while (numberMatcher.find()) {
                System.out.println("numberMatcher = " + numberMatcher.group());
            }
    
            List<String> oldNumberMatcherList = numberMatcher.results().map(MatchResult::group).toList();
            System.out.println("oldNumberMatcherList = " + oldNumberMatcherList);
    
            List<String> newNumberMatcherList = Pattern.compile(number).matcher(value)
                    .results().map(MatchResult::group).toList();
            System.out.println("newNumberMatcherList = " + newNumberMatcherList);
        }
    }
    • 결과
      split = 123
      split = 456
      operatorMatcher = +
      numberMatcher = 123
      numberMatcher = 456
      oldNumberMatcherList = []
      newNumberMatcherList = [123, 456]
    • Pattern compile(regex)String 값으로 들어온 정규식을 Pattern 객체로 바꿔주는 역활을 합니다.
    • Matcher matcher(value)들어온 value 값과 compile 에 설정한 정규식이 매칭되게 Matcher 객체를 만들어 줍니다.
    • String split(value) [Patter 파생]Pattern의 regx 값과 value를 비교하여 regx 값의 항목 중심으로 문자열을 자릅니다.
    • boolean find() [Matcher 파생]regx 값과 value 값에서 일치한 값이 있으면true 없으면false 를 반환합니다
    • String group [Matcher 파생]regx 값과 value 값에서 일치한 문자열을 반환 합니다.
    • Stream<> results() [Matcher 파생]Matcher 에서 나온 값들을 stream화 합니다.
    • .results().map(...) 처럼 stream화 하여 list 형태로 뽑아 사용 가능합니다.
    • String replaceAll(replacement)패턴과 일치하는 모든 문자열을 replacement 로 변경

    확인해 봐야할 점

    oldNumberMatcherList newNumberMatcherList 를 비교를 해보자

    • oldNumberMatcherList 의 경우 numberMatcher 에서 find() → group() 을하여 값을 사용결과 에서 보듯 값이 list에 안담아지는걸 확인이 가능하다
    • newNumberMatcherList 처럼 값을 사용 하고 싶은곳에 따로 사용 하여야 한다 (여러번 사용불가)

     

     

    참고

     

    'JAVA' 카테고리의 다른 글

    Java Optional2  (1) 2022.02.03
    Java Optional 1  (0) 2022.01.25

    댓글

Designed by Tistory.