How do I check if a Java String contains at least one capital letter, lowercase letter, and number?

前端 未结 7 1552
孤城傲影
孤城傲影 2020-12-16 12:38

I know that I could do this with a series of for loops that iterate through the string but that would be terrible programming. Well, my professor prefers I don\'t do it this

相关标签:
7条回答
  • 2020-12-16 12:43

    you can use :

    public static boolean isTextContainUpperCase(String text) {
           if (StringUtils.isEmpty(text)) {
                  return false;
           }
           return !text.equals(text.toLowerCase());
    }
    
    0 讨论(0)
  • 2020-12-16 12:49

    Example of @goshDeveloper's answer.

    First create a Pattern variable with regular expression you want.

    public final Pattern textPattern = Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).+$");
    

    Second you can use it like this:

    public boolean isTextValid(String textToCheck) {
    return textPattern.matcher(textToCheck).matches();
    }
    
    0 讨论(0)
  • 2020-12-16 12:55

    Try regular expression

    ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).+$
    
    descriptions are as follow
    (?=.*[a-z])  -- check lower case letter
    (?=.*[A-Z]) -- check upper case letter
    (?=.*\d) -- check one digit exists
    
    0 讨论(0)
  • 2020-12-16 12:56

    You can use Character class of java. So for lowercase, Character.isLowerCase(ch) Character.isUpperCase(ch). For this you have to iterate over the string. I know that bit is irrelevant to you, however you can use "\\d+" for numbers in a string.

    0 讨论(0)
  • 2020-12-16 12:59

    Using Java 9:

    public boolean isValid(String value) {
        return containsLowerCase(value) && 
               containsUpperCase(value) && 
               containsNumber(value);
    }
    
    private boolean containsLowerCase(String value) {
        return contains(value, i -> Character.isLetter(i) && Character.isLowerCase(i));
    }
    
    private boolean containsUpperCase(String value) {
        return contains(value, i -> Character.isLetter(i) && Character.isUpperCase(i));
    }
    
    private boolean containsNumber(String value) {
        return contains(value, Character::isDigit);
    }
    
    private boolean contains(String value, IntPredicate predicate) {
        return value.chars().anyMatch(predicate);
    }
    
    0 讨论(0)
  • 2020-12-16 13:03

    For a simple string check, a single sweep through the string is enough. Since Regex will not offer any significant benefit, here is a simple for loop to achieve the same :

    private static boolean checkString(String str) {
        char ch;
        boolean capitalFlag = false;
        boolean lowerCaseFlag = false;
        boolean numberFlag = false;
        for(int i=0;i < str.length();i++) {
            ch = str.charAt(i);
            if( Character.isDigit(ch)) {
                numberFlag = true;
            }
            else if (Character.isUpperCase(ch)) {
                capitalFlag = true;
            } else if (Character.isLowerCase(ch)) {
                lowerCaseFlag = true;
            }
            if(numberFlag && capitalFlag && lowerCaseFlag)
                return true;
        }
        return false;
    }
    

    Test run:

    System.out.println(checkString("aBCd1")); // output is true
    System.out.println(checkString("abcd")); //output is false
    

    I think this should help OP's particular problem.

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