Java 检查字符串中除特殊符号外的所有字符是否为大写

Java 检查字符串中除特殊符号外的所有字符是否为大写,java,regex,Java,Regex,这是我第一次使用Java的模式类,因为我想检查字符串是否为大写。特殊符号,如“.”和“,”应视为大写。以下是预期结果: "test,." should return false //because it has a lowercase character "TEST,." should return true //because all are uppercase and the special characters "test" should return false //because it

这是我第一次使用Java的模式类,因为我想检查字符串是否为大写。特殊符号,如“.”和“,”应视为大写。以下是预期结果:

"test,." should return false //because it has a lowercase character
"TEST,." should return true //because all are uppercase and the special characters
"test" should return false //because it has a lowercase character
"TEST" should return true //because all are uppercase
"teST" should return false //because it has a lowercase character

我尝试使用apache的StringUtils,但没有这样做。

只需搜索
[a-z]
,如果找到,则返回false:

if (str.matches(".*[a-z].*")) { 
    // Negative match (false)
}
或者,搜索
^[^a-z]*$
(不确定Java正则表达式语法,但基本上整个字符串不是小写字符):

您可以检查:

if (str.toUpperCase().equals(str)) {..}

您可以遍历这些字符。它的优点是,您可以根据需要自定义匹配

boolean ok = true;
for(char c : yourString.toCharArray()) {
    if(Character.isLetter(c) && !Character.isUpperCase(c)) {
        ok = false;
        break;
    }
}
// ok contains your return value

在Java中,不需要用
/
包围正则表达式。在第一个示例中,您说的是搜索小写字符。由于您使用的是
匹配项
,仅当整个字符串与regex匹配时才返回true,因此您应该使用
匹配项(“.[a-z].”)
@Pshemo谢谢,来自perl regex背景,这对我来说很奇怪PYeah,适应它需要一些时间:)@Pshemo So
String.matches(“stuff”)
基本上等同于我所理解的
$String=~m/^stuff$/
。我不会否决它,因为它在技术上是正确的,但在我看来这确实不是一个非常可读的选项。@SweetieBelle那么你会改进什么呢?如果你想的话,请继续,让它更可读。我不会以这种方式遍历所有字符,我会使用正则表达式。这是否回答了你的问题?
boolean ok = true;
for(char c : yourString.toCharArray()) {
    if(Character.isLetter(c) && !Character.isUpperCase(c)) {
        ok = false;
        break;
    }
}
// ok contains your return value