Programing

영숫자가 아닌 모든 문자를 빈 문자열로 교체

lottogame 2020. 5. 17. 10:29
반응형

영숫자가 아닌 모든 문자를 빈 문자열로 교체


나는 이것을 사용하려고했지만 작동하지 않았다.

return value.replaceAll("/[^A-Za-z0-9 ]/", "");

사용하십시오 [^A-Za-z0-9].

참고 : 일반적으로 영숫자로 간주되지 않으므로 공백을 제거했습니다.


시험

return value.replaceAll("[^A-Za-z0-9]", "");

또는

return value.replaceAll("[\\W]|_", "");

[^a-zA-Z]문자 범위 AZ / az에 속하지 않는 문자를 대체 한다는 점에 유의해야합니다 . 그 말 특수 문자 좋아 é, ß등 또는 키릴 문자 등은 제거됩니다.

이러한 문자를 교체하지 않으려면 사전 정의 된 문자 클래스를 대신 사용하십시오.

 someString.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}]", "");

추신 : \p{Alnum}이 효과를 얻지 못하면와 동일하게 작동합니다 [A-Za-z0-9].


return value.replaceAll("[^A-Za-z0-9 ]", "");

이것은 것이다 떠날 그대로 공간을. 나는 그것이 당신이 원하는 것이라고 가정합니다. 그렇지 않으면 정규식에서 공백을 제거하십시오.


이 간단한 정규식을 시도해 볼 수도 있습니다.

 str = str.replaceAll("\\P{Alnum}", "");

Java의 정규 표현식은 /예를 들어 Perl과 같은 다른 언어와 달리 정규 표현식 주위에 슬래시 ( ) 또는 다른 구분 기호 를 넣을 필요가 없습니다 .


파일 이름을 만들기 위해이 방법을 만들었습니다.

public static String safeChar(String input)
{
    char[] allowed = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_".toCharArray();
    char[] charArray = input.toString().toCharArray();
    StringBuilder result = new StringBuilder();
    for (char c : charArray)
    {
        for (char a : allowed)
        {
            if(c==a) result.append(a);
        }
    }
    return result.toString();
}

해결책:

value.replaceAll("[^A-Za-z0-9]", "")

설명:

[^abc]캐럿 ^이 대괄호 안에 첫 번째 문자로 표시 되면 패턴이 무시됩니다. 이 패턴은 a 또는 b 또는 c를 제외한 모든 문자와 일치합니다.

키워드를 두 가지 기능으로 보았습니다.

  • [(Pattern)] = match(Pattern)
  • [^(Pattern)] = notMatch(Pattern)

또한 패턴과 관련하여 :

  • A-Z = all characters included from A to Z

  • a-z = all characters included from a to z

  • 0=9 = all characters included from 0 to 9

따라서 패턴에 포함되지 않은 모든 문자를 대체합니다.


예를 들어 독일어 움라우트와 같이 ASCII 문자 집합에 속하지 않는 영숫자 문자를 허용하려면 다음 솔루션을 사용하는 것이 좋습니다.

 String value = "your value";

 // this could be placed as a static final constant, so the compiling is only done once
 Pattern pattern = Pattern.compile("[^\\w]", Pattern.UNICODE_CHARACTER_CLASS);

 value = pattern.matcher(value).replaceAll("");

Please note that the usage of the UNICODE_CHARACTER_CLASS flag could have an impose on performance penalty (see javadoc of this flag)


Simple method:

public boolean isBlank(String value) {
    return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}

public String normalizeOnlyLettersNumbers(String str) {
    if (!isBlank(str)) {
        return str.replaceAll("[^\\p{L}\\p{Nd}]+", "");
    } else {
        return "";
    }
}

public static void main(String[] args) {
    String value = " Chlamydia_spp. IgG, IgM & IgA Abs (8006) ";

    System.out.println(value.replaceAll("[^A-Za-z0-9]", ""));

}

output: ChlamydiasppIgGIgMIgAAbs8006

Github: https://github.com/AlbinViju/Learning/blob/master/StripNonAlphaNumericFromString.java


Using Guava you can easily combine different type of criteria. For your specific solution you can use:

value = CharMatcher.inRange('0', '9')
        .or(CharMatcher.inRange('a', 'z')
        .or(CharMatcher.inRange('A', 'Z'))).retainFrom(value)

참고URL : https://stackoverflow.com/questions/1805518/replacing-all-non-alphanumeric-characters-with-empty-strings

반응형