특수 문자가 많은 문자열이 있습니다. 나는 그것들을 모두 제거하고 싶지만 알파벳 문자는 유지합니다.
어떻게 할 수 있습니까?
답변
그것은 당신이 의미하는 바에 달려 있습니다. 그것들을 제거하고 싶다면 다음과 같이하십시오 :
(업데이트 : 분명히 숫자도 유지하고 싶다면 두 번째 줄을 사용하십시오)
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 인 합리적인 것으로 바꾸려면 다음 질문을 살펴보십시오.
답변
나는 이것을 사용하고있다.
s = s.replaceAll("\\W", "");
문자열의 모든 특수 문자를 대체합니다.
여기
\ w : [a-zA-Z_0-9]의 약자 인 단어 문자
\ W : 단어가 아닌 문자
답변
다음 방법을 사용하여 영숫자를 유지할 수 있습니다.
replaceAll("[^a-zA-Z0-9]", "");
그리고 알파벳 문자 만 유지하려면 이것을 사용하십시오.
replaceAll("[^a-zA-Z]", "");
답변
특수 문자를
replaceAll("\\your special character","new character");
예 : *의 모든 항목을 공백으로 바꾸려면
replaceAll("\\*","");
*이 문장은 한 번에 한 가지 유형의 특수 문자 만 대체 할 수 있습니다.
답변
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
여기서 공백, 쉼표 및 앰퍼샌드를 제외한 모든 특수 문자가 대체됩니다. 다음 정규식으로 공백, 쉼표 및 앰퍼샌드를 생략 할 수도 있습니다.
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
여기서 Input은 문자를 대체하는 데 필요한 문자열입니다.
답변
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