我正在开发一个程序,让用户输入一个字母数字键,并根据一些标准检查它是否是一个有效的键,其中一个标准是该键是否包含大写字母。这是我迄今为止所做的尝试:
else if (key.contains("QWERTYUIOPASDFGHJKLZXCVBNM")){
UI.println("Invalid, key contains a space, illegal character");
}
如果大写字母是按此顺序书写的,它只检测大写字母。是否有类似key.contains i这样的命令应该使用?
7条答案
按热度按时间wj8zmpe11#
有了溪流,就可以到下面去。
这在资源方面比正则表达式要轻得多。
q8l4jmvw2#
或者你可以按照sopheamak的描述来做:How do I check if a Java String contains at least one capital letter, lowercase letter, and number?
在您的示例中,这将是:
如果key中的一个字母是大写的,它将与
key.toLowerCase()
的结果不匹配,因此由于!
而返回true。xam8gpfp3#
只需使用正确的正则表达式
matcher.find()
ao218c7q4#
你可以使用Apache Commons Lang(https://commons.apache.org/proper/commons-lang/). Is有一个方法来实现这一点:
ubby3x7f5#
如果您使用Guava,您可以使用功能强大的
CharMatcher
:首先将matcher编译为类的静态成员,这样只需要编译一次,而不需要在每次调用时重新计算它。
将其更改为您实际需要的任何字母。例如,如果您需要一些重音字符,您可以扩展以下字符:
如果你很懒,只想委托给
Character::isUpperCase
,这也是可能的:然后在您的程式码中,撰写下列程式码:
jw5wzhpr6#
您可以将
String#matches
与regex、.*\p{Lu}.*
配合使用。通过documentation了解有关Pattern
的更多信息。演示:
输出:
可选地,
您可以使用regex、
\p{Lu}
检查是否存在大写字母。演示:
qhhrdooz7#
如果您采用了@OlivierGrégoire的流解决方案,并希望将其限制为大写字母[A-Z],您可以通过将Unicode块测试为BASIC_LATIN来获得它。其中BASIC_LATIN是Unicode的ASCII块(请参见BASIC_LATIN)