如何检查Java String是否包含至少一个大写字母,小写字母和数字?

Mic*_*rum 14 java string

我知道我可以通过一系列for循环遍历字符串来实现这一点,但那将是糟糕的编程.好吧,我的教授更喜欢我不这样做.我想使用正则表达式来做到这一点.

Cyp*_*rUS 14

对于简单的字符串检查,单个扫描字符串就足够了.由于Regex不会提供任何显着的好处,这里有一个简单的for循环来实现相同的目的:

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;
}
Run Code Online (Sandbox Code Playgroud)

测试运行:

System.out.println(checkString("aBCd1")); // output is true
System.out.println(checkString("abcd")); //output is false
Run Code Online (Sandbox Code Playgroud)

我认为这应该有助于OP的特殊问题.


Łuk*_*z K 12

使用 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢您的解决方案的可读性。在性能方面,我不喜欢每个新条件都需要对值进行额外迭代。当然,小/中字符串不是大问题,但需要考虑。 (3认同)

小智 9

您可以使用 :

public static boolean isTextContainUpperCase(String text) {
       if (StringUtils.isEmpty(text)) {
              return false;
       }
       return !text.equals(text.toLowerCase());
}
Run Code Online (Sandbox Code Playgroud)

  • 将 if 语句编辑为 !text.equals(text.toLowerCase()) ,它可能会按照您的要求执行(我在答案中编辑了代码) (3认同)

Yho*_*dri 8

@goshDeveloper答案的示例。

首先使用所需的正则表达式创建一个Pattern变量。

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

其次,您可以像这样使用它:

public boolean isTextValid(String textToCheck) {
return textPattern.matcher(textToCheck).matches();
}
Run Code Online (Sandbox Code Playgroud)


Tan*_*aha 6

如果您想检查字符串是否包含大写字母,可以使用以下模式:

String s="abcDe_shdgwU";    //you can have any String here

if(s.matches(".*[A-Z].*"))
   System.out.println("The String contains Uppercase letter(s)");
else
  System.out.println("does not contain Uppercase letter(s)");
Run Code Online (Sandbox Code Playgroud)

希望有帮助。谢谢。问候, 塔努迈·萨哈


Gho*_*per 5

尝试正则表达式

^(?=.*[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
Run Code Online (Sandbox Code Playgroud)

  • 遵循本教程https://www.tutorialspoint.com/java/java_regular_expressions.htm (2认同)