Programing

문자열에 영숫자가 아닌 문자가 있는지 확인하는 방법은 무엇입니까?

crosscheck 2020. 11. 7. 09:01
반응형

문자열에 영숫자가 아닌 문자가 있는지 확인하는 방법은 무엇입니까?


문자열에 영숫자가 아닌 문자가 있는지 알려주는 방법이 필요합니다.

예를 들어 문자열이 "abcdef?"인 경우 또는 "abcdefà"인 경우 메서드는 true를 반환해야합니다.


Apache Commons Lang 사용 :

!StringUtils.isAlphanumeric(String)

또는 String의 문자를 반복하고 다음을 확인하십시오.

!Character.isLetterOrDigit(char)

여전히 한 가지 문제가 남아 있습니다. 예제 문자열 "abcdefà"는 문자이므로 영숫자 à입니다. 하지만 영숫자가 아닌 것으로 간주되기를 원한다고 생각합니다.

따라서 대신 정규식을 사용할 수 있습니다.

String s = "abcdefà";
Pattern p = Pattern.compile("[^a-zA-Z0-9]");
boolean hasSpecialChar = p.matcher(s).find();

한 가지 방법은 String 클래스 자체를 사용하는 것입니다. 문자열이 다음과 같다고 가정 해 보겠습니다.

String s = "some text";
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$");

다른 하나는 Apache commons와 같은 외부 라이브러리를 사용하는 것입니다.

String s = "some text";
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);

문자열의 각 문자를 살펴보고 확인 Character.isDigit(char);하거나Character.isletter(char);

또는 정규식을 사용할 수 있습니다.


이 함수를 사용하여 문자열이 영숫자인지 확인합니다.

public boolean isAlphanumeric(String str)
{
    char[] charArray = str.toCharArray();
    for(char c:charArray)
    {
        if (!Character.isLetterOrDigit(c))
            return false;
    }
    return true;
}

외부 라이브러리를 가져올 필요가 없으며 나중에 문자열에 대해 다른 유효성 검사를 수행하려는 경우 코드를 쉽게 수정할 수 있습니다.


Apache Commons 라이브러리를 사용할 수 있다면 Commons-Lang StringUtils에는 원하는 작업을 수행하는 메서드 isAlphanumeric()가 있습니다.


string.matches("^\\W*$");원하는대로해야하지만 공백은 포함되지 않습니다. string.matches("^(?:\\W|\\s)*$");공백도 일치합니다.


Java.lang에서 Character 클래스의 isLetter (char c) 정적 메소드를 사용할 수 있습니다.

public boolean isAlpha(String s) {
    char[] charArr = s.toCharArray();

    for(char c : charArr) {
        if(!Character.isLetter(c)) {
            return false;
        }
    }
    return true;
}

참고 URL : https://stackoverflow.com/questions/8248277/how-to-determine-if-a-string-has-non-alphanumeric-characters

반응형