특수 문자가 많은 문자열이 있습니다. 나는 그것들을 모두 제거하고 싶지만 알파벳 문자는 유지합니다.
어떻게 할 수 있습니까?
답변:
그것은 당신이 의미하는 바에 달려 있습니다. 그것들을 제거하고 싶다면 다음과 같이하십시오 :
(업데이트 : 분명히 숫자도 유지하고 싶다면 두 번째 줄을 사용하십시오)
String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
또는 동등한 것 :
String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
(이 모든 것은 정규식 패턴을 미리 컴파일하고 상수에 저장하여 크게 향상시킬 수 있습니다)
또는 Guava를 사용하여 :
private static final CharMatcher ALNUM =
CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
.or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);
그러나 악센트 부호가있는 문자를 여전히 ascii 인 합리적인 것으로 바꾸려면 다음 질문을 살펴보십시오.
Andrzej Doyle의 답변 예에 따라 더 나은 해결책은 다음을 사용하는 것입니다 org.apache.commons.lang3.StringUtils.stripAccents().
package bla.bla.utility;
import org.apache.commons.lang3.StringUtils;
public class UriUtility {
public static String normalizeUri(String s) {
String r = StringUtils.stripAccents(s);
r = r.replace(" ", "_");
r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
return r;
}
}
문자열에 기본 정규식을 사용하여 모든 특수 문자를 찾거나 패턴 및 매처 클래스를 사용하여 사용자 정의 문자열을 검색 / 수정 / 삭제할 수 있습니다. 이 링크에는 정규 표현식에 대한 간단하고 이해하기 쉬운 예제가 있습니다. http://www.vogella.de/articles/JavaRegularExpressions/article.html
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();