오래전 나는 "bad"문자의 인스턴스에 대해 String 인수를 검사하는 detectBadChars(String)
이라는 메서드를 작성했습니다.기존 Java 정규 표현식에 공백 처리 추가
나쁜 문자의 원래 목록이었다
- '~'
- '#'
- '@'
- '*'
- '+'
- '% '
내 방식은 훌륭하게 작동합니다. : 비즈니스 로직은 이제 변경, 다음과 같은있다
// Detects for the existence of bad chars in a string and returns the
// bad chars that were found.
protected String detectBadChars(String text) {
Pattern pattern = Pattern.compile("[~#@*+%]");
Matcher matcher = pattern.matcher(text);
StringBuilder violatorsBuilder = new StringBuilder();
if(matcher.find()) {
String group = matcher.group();
if (!violatorsBuilder.toString().contains(group))
violatorsBuilder.append(group);
}
return violatorsBuilder.toString();
}
지금 도 나쁜 것으로 간주 :
- 캐리지 리턴 (
\r
) - 새 라인 (
\n
) - 탭 (
\t
) - 임의의 연속 공백 (
" "
," "
등)
그래서 새로운 잘못된 문자를 수용하기 위해 정규식을 수정하려고합니다. 정규식을 다음으로 변경 :
Pattern pattern = Pattern.compile("[~#@*+%\n\t\r[ ]+]");
... 예외가 발생합니다. 내 생각에 정규 표현식에 "\ n \ t \ r"을 추가하면 개행 문자, 탭 및 CR이 각각 할당됩니다. 그리고 나서 "[ ]+"
을 추가하면 공백으로 구성된 새로운 "클래스/그룹"을 추가 한 다음 해당 공백을 1 개 이상 허용하는 것으로 그룹화하여 효과적으로 연속 된 공백을 처리합니다.
어디서 awyre가되고 내 정규식은 무엇이되어야합니까 (이유)? 미리 감사드립니다!
아아! 2 초 동안! (+1) – Gamb
@Gamb. OOP.:) –
+1 또한 백 슬래시 자체를 이스케이프해야하기 때문에 예외가 throw됩니다. – MByD