Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查Java字符串是否至少包含一个大写字母、小写字母和数字?_Java_String - Fatal编程技术网

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

如何检查Java字符串是否至少包含一个大写字母、小写字母和数字?,java,string,Java,String,我知道我可以用一系列循环遍历字符串的for循环来实现这一点,但这将是一个糟糕的编程。我的教授更喜欢我不这样做。我想使用正则表达式来实现这一点。试试正则表达式 ^(?=.*[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 e

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

试试正则表达式

^(?=.*[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

您可以使用java的字符类。所以对于小写,
Character.isLowerCase(ch)

Character.isUpperCase(ch)
。为此,必须迭代字符串。我知道位与您无关,但是您可以使用
“\\d+”
表示字符串中的数字

对于一个简单的字符串检查,对字符串进行一次扫描就足够了。由于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;
}
我认为这应该有助于OP的特殊问题。

您可以使用:

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

@goshDeveloper的答案示例

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

public final Pattern textPattern = Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).+$");
其次,您可以这样使用它:

public boolean isTextValid(String textToCheck) {
return textPattern.matcher(textToCheck).matches();
}
使用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);
}

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

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)");
希望有帮助。 非常感谢。 当做
Tanumay Saha

那么是什么阻止了您使用正则表达式来执行此操作?我不知道如何操作。您不知道如何编写regexp或如何使用regexp来检查
字符串
是否匹配?通过您最喜欢的搜索引擎搜索,应该可以很容易地找到这两个教程。@MichaelDrum:请参阅。就时间复杂度而言,正则表达式的行为与简单的线性搜索相同。在最坏的情况下,正则表达式可能表现不好。关键是,您的案例太简单,无法研究正则表达式。对我来说,它似乎没有什么特别的优势。为什么它是“糟糕的编程”?它可能至少会有同样的效率,可能会更有效率。谢谢。这看起来很有希望。但是,我没有使用正则表达式的经验。假设我想知道字符串文本是否至少包含一个小写字母、一个大写字母和一个数字。我该如何以“如果”语句的形式来写呢?遵循本教程,这些字母不是用法语和西班牙语写的吗?这对法语和/或西班牙语或?Dude,这是错误的答案如果文本参数字符已经小写,它也将返回true,例如
isTextContainUpperCase(“文本”)
将返回true,尽管它在allEdit中不包含大写字符if语句to!text.equals(text.toLowerCase()),它可能会满足您的要求(我在答案中编辑了代码),我喜欢您的解决方案的可读性。就性能而言,我不喜欢每一个新条件都需要对该值进行额外的迭代。当然,在中/小字符串中不是一个大问题,而是要考虑的问题。这个解决方案也适用于Java8。对于法语和/或西班牙语,这是什么模式?它符合民族性吗?例如,波兰语?它们都是大写,但不是ASCII
[A-Z]
的一部分。不,它不起作用,我已经测试了它的小写,你可以使用“*[A-Z].*”,所以如果我这样做:
System.out.println(checkString(“A”)System.out.println(checkString(“a”)我收到相同的输出->
false
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)");