How to determine if a String has non-alphanumeric characters?

后端 未结 8 1092
一向
一向 2020-11-27 02:44

I need a method that can tell me if a String has non alphanumeric characters.

For example if the String is \"abcdef?\" or \"abcdefà\", the method must return true.

相关标签:
8条回答
  • 2020-11-27 03:06

    One approach is to do that using the String class itself. Let's say that your string is something like that:

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

    one other is to use an external library, such as Apache commons:

    String s = "some text";
    boolean hasNonAlpha = !StringUtils.isAlphanumeric(s);
    
    0 讨论(0)
  • 2020-11-27 03:09

    Use this function to check if a string is alphanumeric:

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

    It saves having to import external libraries and the code can easily be modified should you later wish to perform different validation checks on strings.

    0 讨论(0)
  • 2020-11-27 03:12

    You can use isLetter(char c) static method of Character class in Java.lang .

    public boolean isAlpha(String s) {
        char[] charArr = s.toCharArray();
    
        for(char c : charArr) {
            if(!Character.isLetter(c)) {
                return false;
            }
        }
        return true;
    }
    
    0 讨论(0)
  • 2020-11-27 03:14

    Using Apache Commons Lang:

    !StringUtils.isAlphanumeric(String)
    

    Alternativly iterate over String's characters and check with:

    !Character.isLetterOrDigit(char)
    

    You've still one problem left: Your example string "abcdefà" is alphanumeric, since à is a letter. But I think you want it to be considered non-alphanumeric, right?!

    So you may want to use regular expression instead:

    String s = "abcdefà";
    Pattern p = Pattern.compile("[^a-zA-Z0-9]");
    boolean hasSpecialChar = p.matcher(s).find();
    
    0 讨论(0)
  • string.matches("^\\W*$"); should do what you want, but it does not include whitespace. string.matches("^(?:\\W|\\s)*$"); does match whitespace as well.

    0 讨论(0)
  • 2020-11-27 03:19

    You have to go through each character in the String and check Character.isDigit(char); or Character.isletter(char);

    Alternatively, you can use regex.

    0 讨论(0)
提交回复
热议问题