문자열에서 특수 문자를 바꾸는 방법은 무엇입니까?


답변:


187

그것은 당신이 의미하는 바에 달려 있습니다. 그것들을 제거하고 싶다면 다음과 같이하십시오 :
(업데이트 : 분명히 숫자도 유지하고 싶다면 두 번째 줄을 사용하십시오)

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 인 합리적인 것으로 바꾸려면 다음 질문을 살펴보십시오.


내가이 기능을 사용할 때 그것은 모든 숫자를 제거하는 것입니다. 그러나 나는 숫자를 제거하고 싶지 않습니다. 특수 문자를 제거하고 싶습니다. 무언가를 제안하십시오 ..
Tanu

글쎄요 당신은 알파벳 만 원한다고 말했죠. 하지만 잠시 후에 답변을 업데이트하겠습니다
Sean Patrick Floyd

문자열을 연결하고 싶지만 1과 같은 조건으로 연결하고 싶습니다. 결과가 하나만 있으면 연결이 필요하지 않습니다 .2. 결과가 다음 형식 예제에서 연결 문자열보다 1 이상인 경우 : stack + over + flow
Tanu

2
@Tanu는 다른 질문입니다. 새로운 것으로 만들기
Pekka

공백을 제거하지 않으려면 어떻게합니까? 또는 탭과 같은 모든 공백, 줄 바꿈이 하나의 공백으로 축소되었다고 말합니까?
저주받은

74

나는 이것을 사용하고있다.

s = s.replaceAll("\\W", ""); 

문자열의 모든 특수 문자를 대체합니다.

여기

\ w : [a-zA-Z_0-9]의 약자 인 단어 문자

\ W : 단어가 아닌 문자


<script> alert ( 'XSS Attack') </ script>에서는 작동하지 않습니다. '<', '>', '\'문자를 제거하는 방법은 무엇입니까?
Manoj

11

다음 방법을 사용하여 영숫자를 유지할 수 있습니다.

replaceAll("[^a-zA-Z0-9]", "");

그리고 알파벳 문자 만 유지하려면 이것을 사용하십시오.

replaceAll("[^a-zA-Z]", "");

5
공간 사용replaceAll("[^a-zA-Z0-9 ]", "");
Qamar

6

특수 문자를

replaceAll("\\your special character","new character");

예 : *의 모든 항목을 공백으로 바꾸려면

replaceAll("\\*","");

*이 문장은 한 번에 한 가지 유형의 특수 문자 만 대체 할 수 있습니다.


"문자열에서 특수 문자를 바꾸는 방법"이라는 질문 제목을 보았을 때 확실히 찾던 것입니다. 감사!
Mr.Drew

2
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

여기서 공백, 쉼표 및 앰퍼샌드를 제외한 모든 특수 문자가 대체됩니다. 다음 정규식으로 공백, 쉼표 및 앰퍼샌드를 생략 할 수도 있습니다.

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");

여기서 Input은 문자를 대체하는 데 필요한 문자열입니다.


2

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;
    }
}


0

윈도우 PC의 문자 맵 도구에서 해당 정크 문자에 대한 유니 코드를 얻고 저작권 기호에 \ u 예를 들어 \ u00a9를 추가 할 수 있습니다. 이제 해당 문자열을 특정 정크 캐하 랙터와 함께 사용할 수 있습니다. 정크 문자를 제거하지 말고 적절한 유니 코드로 교체하십시오.



-1
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();

정규식을 조금 설명해 주시겠습니까?
stdunbar

코드를 설명하기 위해 답변 섹션에 메모를 추가하는 것이 좋습니다. 좋은 답변을 작성하는 방법에 대해 자세히 읽어보십시오 .
Joe Ferndz

이것은 실제로 질문에 대한 답이 아닙니다. 다른 질문이있는 경우 질문하기를 클릭하여 질문 할 수 있습니다 . 평판 이 충분하면이 질문에 더 많은 관심을 끌기 위해 현상금추가 할 수도 있습니다 . - 리뷰에서
Aman Garg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.