이메일, 전화번호를 위한 정규식은 검색해서 써본적이 있는데 "//" 와 "\n" 사이의 문자를 구분해서 사용하는 것은 생각할때는 쉬웠는데 막상 생각해보니 그렇게 쉽지는 않았다.

Pattern과 Matcher는 공식 문서를 봐도 무슨 소린지 잘 모르겠고 블로그들을 찾아봐도 솔찍히 이해가 되지 않아서 간단한 코드로 제출했다.

public String[] customDelimiter(String input) {
        int idx = input.indexOf("\\n");
        String customDelimiter = input.substring(2, idx); // 구분자 추출
        System.out.println("customDelimiter = " + customDelimiter);
        String escapedDelimiter = Pattern.quote(customDelimiter);
        return str.split(escapedDelimiter); // 이스케이프된 구분자로 분리
    }
String escapedDelimiter = Pattern.quote(customDelimiter);
간단하게도 qoute 메서드 하나로 구분자가 잘 작동하게 되었다.
Pattern.qoute()는 특수 문잦가 포함된 문자열을 정규식으로 안전하게 사용할 수 있도록 해주는 메서드이다
자열을 정규식 패턴으로 사용할 때 특수 문자(., *, ?, [, ], (, ), {, }, |, ^, $, \ 등)가 있으면 예기치 않은 동작을 할 수 있는데, 
Pattern.quote()를 사용하면 이러한 특수 문자를 일반 문자열로 처리할 수 있다.

 

그런데 구분자로 " \n " 이 들어갈때라던가
String customDelimiter = input.substring(2, idx);
String str = input.substring(idx + 2);

특히 저 두줄 코드가 너무 마음에 들지 않아 끝나고 1주일이 지났지만 마음에 안드는 부분을 바꿨다.

이해되지 않아도 이렇게 저렇게 하다보니 조금씩 이해가 됬고, 결국 지저분하게라도 바꾸긴 바꾸었다.

    public String[] customDelimiter(String input) {
        String result = "";
        String START = "//";
        String END = Pattern.quote("\\n");

        Pattern pattern = Pattern.compile(START + "(.*?)" + END);
        Matcher matcher = pattern.matcher(input);
        
        if (matcher.find()) {
            String delimiter = matcher.group(1);
            int idx = matcher.end();
            String splitInput = input.substring(idx);
            return splitInput.split(Pattern.quote(delimiter));
        }
    }
}


*******  if (matcher.find()) { } 를 **무조건** 실행하여 true를 반환하고,    *******
*******			Matcher 객체는 해당 매칭 결과를 내부에 저장한다.     *******

			matcher.find() 메소드를 실행하지 않으면
Exception in thread "main" java.lang.IllegalStateException: No match found 가 발생한다.

 

덧셈할 문자열을 입력해 주세요.
//\t\n1\t2\t3
delimiter = \t

delimiter 로 \n을 넣었을때는 끝까지 성공하지 못했다.

 

 

'프리코스 > 1주차' 카테고리의 다른 글

Java 정규식, Pattern, Matcher  (0) 2024.10.30
Git Commit Message Conventions 정리  (0) 2024.10.24
pr 전 체크리스  (0) 2024.10.18

+ Recent posts