다음과 같은 특수 문자를 제거하고 싶습니다.
- + ^ . : ,
Java를 사용하는 문자열에서.
다음과 같은 특수 문자를 제거하고 싶습니다.
- + ^ . : ,
Java를 사용하는 문자열에서.
replaceAll
하면됩니다. 더 난해한 요구 사항이 있으면 질문을 편집하십시오. :)
replaceAll
이 그들을 위해 a 를 수행하거나 구문 분석을 수행합니다. 문자열에서 꺼내고 싶은 문자가 아닌 문자를 다른 문자열에 추가하고 결국 반환 할 문자열에 + =를 수행합니다.
deleteChars.apply( fromString, "-+^.:," );
– 여기에서 deleteChars 찾기
답변:
특수 문자로 정의하는 내용에 따라 다르지만 다음을 시도하십시오 replaceAll(...)
.
String result = yourString.replaceAll("[-+.^:,]","");
^
문자는 목록에서 첫 번째 문자가 아니어야합니다 . 문자를 이스케이프해야하거나 "이 문자를 제외한 모든 문자"를 의미하기 때문입니다.
또 다른 참고 사항 : -
문자는 목록의 첫 번째 또는 마지막 문자 여야합니다. 그렇지 않으면 이스케이프 처리하거나 범위를 정의해야합니다 (예 : :-,
" :
~ 범위의 모든 문자를 의미 함 ,
).
문자 위치에 따라 일관성을 유지하기 위해하지 그래서, 당신은 정규 표현식에서 특별한 의미를 갖는 모든 문자를 탈출 할 수 있습니다 (을 다음 목록, 그래서 다른 문자를 인식 완료되지 수있는 것처럼 (
, {
, $
등) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
모든 구두점과 기호를 제거하려면 다음 정규식을 시도하십시오. \p{P}\p{S}
(Java 문자열에서는 백 슬래시를 이스케이프해야합니다 :) "\\p{P}\\p{S}"
.
세 번째 방법은 다음과 같은 방법이 될 수 있습니다. 문자열에 무엇이 남아 있어야하는지 정확히 정의 할 수 있습니다.
String result = yourString.replaceAll("[^\\w\\s]","");
즉, 단어 문자 (아무래도 0-9 또는 _) 또는 공백이 아닌 모든 항목을 바꿉니다.
편집 : 도움이 될 수있는 몇 가지 다른 패턴이 있습니다. 그러나 모두 설명 할 수는 없으므로 regular-expressions.info 의 참조 섹션을 살펴보십시오 .
다음은 Ray가 제안한 "허용 된 문자 정의"접근 방식에 대한 덜 제한적인 대안입니다.
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
정규식은 구분 기호 (공백, 줄 바꿈 등)가 아닌 모든 언어의 문자가 아닌 모든 항목과 일치합니다. 사용할 수 없습니다 [\P{L}\P{Z}]
(대문자 P는 해당 속성이 없음을 의미합니다). 문자가 공백이 아니고 그 반대의 경우도 마찬가지이므로 모든 것과 거의 일치하는 "문자가 아니거나 공백이 아닌 모든 것"을 의미하기 때문에 사용할 수 없습니다.
유니 코드에 대한 추가 정보
일부 유니 코드 문자는 인코딩하는 다양한 방법 (단일 코드 포인트 또는 코드 포인트 조합)으로 인해 문제를 일으키는 것으로 보입니다. 자세한 내용은 regular-expressions.info 를 참조하십시오.
[\P{L}]
-
문자는 목록의 첫 번째 또는 마지막 문자 여야하며 그렇지 않으면 이스케이프되어야합니다.
[^\\p{L}\\p{Z}]
독일어 움라우트 (ä, ö, ü)도 제거하는 것 같습니다 (적어도 저에게는 그렇게합니다 : /). 그래서 "정규식은 어떤 언어로 된 문자가 아닌 모든 것과 일치합니다"가 100 % 정확하지 않은 것 같습니다.
String result = yourString.replaceAll("[^\w\s]","");
오류를 만드는Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
영숫자를 제외한 모든 문자를 대체합니다.
replaceAll("[^A-Za-z0-9]","");
여기에 설명 된대로 http://developer.android.com/reference/java/util/regex/Pattern.html
패턴은 컴파일 된 정규식입니다. 대부분의 경우, 편의점과 같은 방법
String.matches
,String.replaceAll
그리고String.split
바람직하지만, 같은 정규 표현식으로 많은 작업을 수행해야하는 경우, 한 번 컴파일하고 재사용하는 것이 더 효율적일 수있다. Pattern 클래스와 그 동반자 인 Matcher는 또한 String에 의해 노출 된 소량보다 더 많은 기능을 제공합니다.
public class RegularExpressionTest {
public static void main(String[] args) {
System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}
public static String getOnlyDigits(String s) {
Pattern pattern = Pattern.compile("[^0-9]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
public static String getOnlyStrings(String s) {
Pattern pattern = Pattern.compile("[^a-z A-Z]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
}
결과
String is = one
Number is = 9196390097
특수 문자를 제거하려면
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
출력은 다음과 같습니다. abdd.
이것은 완벽하게 작동합니다.
String.replaceAll()
Java 에서 메소드를 사용하십시오 .
replaceAll 은 문제에 충분해야합니다.
String
수업 문서를 읽어 보셨나요 ? 특히 '정규식'이라는 단어를 찾으십시오. 거기에 몇 가지 방법이 있고, 생각의 비트는 진행 방법을 알려해야 ... :)