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


답변:


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.