예를 들어 +82-10-9999-9999 라는 전화번호가 있다고 하자.
그리고 해당 전화번호가 +XX-XX-XXXX-XXXX (X는 숫자) 의 형식에 맞는지 확인하고 싶다면 아래의 코드를 사용하면 된다.
boolean right = phone_number.matches("\\+\\d{2}-\\d{2}-\\d{4}-\\d{4}");
동일하게 +82-10-9999-9999 라는 전화번호가 있고,
해당 전화번호가 +XX-XX-XXXX-XXXX (X는 숫자)의 형식에 맞는지 matcher로 확인해보자.
Pattern pattern = Pattern.compile("\\+\\d{2}-\\d{2}-\\d{4}-\\d{4}");
Matcher match = pattern.matcher(phone_number);
boolean right = match.matches();
는... 없는 것이다. 왜냐하면 String.matches의 내부에는 이미 Pattern.matcher로 구성되어 있기 때문이다.
그럼 성능의 차이는 없다고 봐야할까? 성능을 개선하기 위해서는 어떤 것이 필요할까?
결론부터 말하자면 무조건 Pattern.matcher를 이용해야한다.
단순히 반복문에서의 Pattern.matcher와 String.matches는 차이가 없지만,
아래의 코드와 같이 필요한 정규식 표현을 어플리케이션 시작 전에 compile 시켜놓고 재사용 해야한다.
private final Pattern pattern = Pattern.compile("\\d{3}-\\d{4}-\\d{4}");
?