안녕하세요. 저는 약간의 문제가 있습니다.패턴 배열에서 찾고 방법을 실행하십시오.
문자열에서 약 200 개의 정규식 패턴을 확인하고 패턴을 실행하여 메소드를 실행해야합니다. 그냥 내가 필요한 것을 취소하려고
Pattern pattern = Pattern.compile([Array of patterns]);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
Pattern p = matcher.pattern();
p.runSomeMethod();
}
물론, 위의 코드는 그것을 할 수있는 방법이되지 않습니다 : (반 사이비) 같은 것을 의미
.
내 문제는 String
또는 Pattern
중 하나를 확장해야한다는 것이고, 실제 문제는 두 가지가 모두 final
이므로 수행 할 수 없다는 것입니다.
기본적으로 내가하려는 것은 문자열에 여러 개의 패턴이있는 경우 1 개만 들어 맞고 선택된 패턴을 기반으로 프로 시저를 실행하여 막대한 전환 사례를 피하려고합니다. 패턴이 내 클래스의 객체를 반환 할 여러 클래스를 구현하면 메소드 만 실행합니다.
어떤 생각을 어떻게 할 수 있습니까? 주제에 대한 정보는 거의 찾지 못했습니다.
하지만 실행 시간에 컴파일해야하기 때문에 200+ 정규식으로 갈 때 실제로 느려지지 않을까요? 모든 구현을 파일로 만들고 미리 정의 된 해시 맵을 만들면 더 빨리 실행될 것이라고 가정합니다. 가능한가? –
Regexes는 항상 런타임에 컴파일됩니다. 이 메서드는 클래스 이니셜 라이저를 사용하므로 클래스 초기화 중에 정규식이 한 번만 컴파일됩니다. 현대의 모든 머신은 마이크로 초 범위에서 200 개의 정규식을 컴파일합니다. regexes를 실행하는 가장 좋은 순서를 예측하거나 더 똑똑한 매칭 알고리즘을 생성하기를 원하지 않는 한, 이것보다 더 빨리 얻을 수는 없습니다. 둘 다 매우 어렵습니다. –
이것은 제 생각과 같습니다. 패턴의 순서가 중요하더라도 LinkedHashMap 또는 쌍 목록을 사용합니다. –