如何检查字符串是否包含大写java

mw3dktmi  于 2022-12-10  发布在  Java
关注(0)|答案(7)|浏览(200)

我正在开发一个程序,让用户输入一个字母数字键,并根据一些标准检查它是否是一个有效的键,其中一个标准是该键是否包含大写字母。这是我迄今为止所做的尝试:

else if (key.contains("QWERTYUIOPASDFGHJKLZXCVBNM")){
    UI.println("Invalid, key contains a space, illegal character");
    }

如果大写字母是按此顺序书写的,它只检测大写字母。是否有类似key.contains i这样的命令应该使用?

wj8zmpe1

wj8zmpe11#

有了溪流,就可以到下面去。

key.chars().anyMatch(Character::isUpperCase)

这在资源方面比正则表达式要轻得多。

q8l4jmvw

q8l4jmvw2#

或者你可以按照sopheamak的描述来做:How do I check if a Java String contains at least one capital letter, lowercase letter, and number?
在您的示例中,这将是:

else if (!key.equals(key.toLowerCase())

如果key中的一个字母是大写的,它将与key.toLowerCase()的结果不匹配,因此由于!而返回true。

xam8gpfp

xam8gpfp3#

只需使用正确的正则表达式matcher.find()

Pattern.compile("[A-Z]").matcher(key).find()
ao218c7q

ao218c7q4#

你可以使用Apache Commons Lang(https://commons.apache.org/proper/commons-lang/). Is有一个方法来实现这一点:

else if (StringUtils.containsAny(key, "QWERTYUIOPASDFGHJKLZXCVBNM")){
    UI.println("Invalid, key contains a space, illegal character");
}
ubby3x7f

ubby3x7f5#

如果您使用Guava,您可以使用功能强大的CharMatcher
首先将matcher编译为类的静态成员,这样只需要编译一次,而不需要在每次调用时重新计算它。

private static final CharMatcher UPPERCASE_LETTER = CharMatcher.inRange('A', 'Z');

将其更改为您实际需要的任何字母。例如,如果您需要一些重音字符,您可以扩展以下字符:

private static final CharMatcher UPPERCASE_LETTER = CharMatcher.inRange('A', 'Z')
                                                               .or(CharMatcher.anyOf("ÁÀÄÂÉÈËÊÍÌÏÎÓÒÖÔÚÙÜÛ"));

如果你很懒,只想委托给Character::isUpperCase,这也是可能的:

private static final CharMatcher UPPERCASE_LETTER = CharMatcher.forPredicate(Character::isUpperCase)

然后在您的程式码中,撰写下列程式码:

if (UPPERCASE_LETTER.matchesAnyOf(key)) {
  // Do what you want
}
jw5wzhpr

jw5wzhpr6#

您可以将String#matchesregex.*\p{Lu}.*配合使用。通过documentation了解有关Pattern的更多信息。

演示

public class Main {
    public static void main(String args[]) {
        String[] keys = { "HELLO", "Hello", "hello", "hello world", "Hello World" };
        for (String key : keys) {
            if (key.matches(".*\\p{Lu}.*")) {
                System.out.println(key + " => Invalid");
            } else {
                System.out.println(key + " => Valid");
            }
        }
    }
}

输出:

HELLO => Invalid
Hello => Invalid
hello => Valid
hello world => Valid
Hello World => Invalid

可选地,

您可以使用regex\p{Lu}检查是否存在大写字母。

演示

import java.util.regex.Pattern;

public class Main {
    public static void main(String args[]) {
        String[] keys = { "HELLO", "Hello", "hello", "hello world", "Hello World" };
        for (String key : keys) {
            if (Pattern.compile("\\p{Lu}").matcher(key).find()) {
                System.out.println(key + " => Invalid");
            } else {
                System.out.println(key + " => Valid");
            }
        }
    }
}
qhhrdooz

qhhrdooz7#

如果您采用了@OlivierGrégoire的流解决方案,并希望将其限制为大写字母[A-Z],您可以通过将Unicode块测试为BASIC_LATIN来获得它。其中BASIC_LATIN是Unicode的ASCII块(请参见BASIC_LATIN

key.chars().anyMatch(this::isBasicLatinCapital)
        ...
        private boolean isBasicLatinCapital( int c) {
        return
            Character.UnicodeBlock.BASIC_LATIN == Character.UnicodeBlock.of(c) && Character.isUpperCase(c) ;
        }

相关问题