是否存在一个现有的库方法,用于检查Java中的String是大写还是小写?

Nic*_*lai 30 java string

我知道upper()Java和其他框架中有很多方法,比如Apache commons lang,它将String转换为全部大写.

有没有提供任何公共库等的方法isUpper(String s)isLower(String s)方式,检查在字符串中所有字符都是大写或小写?

编辑:

关于转换为Upper并与之比较的许多好答案.我想我应该更具体一点,并说我已经想到了这一点,但我希望能够使用现有方法.

关于可能在apache.commons.lang.StringUtils中包含此内容的好评.有人甚至提交了一个补丁(20090310).希望我们很快就会看到这一点. https://issues.apache.org/jira/browse/LANG-471

编辑:

我需要这种方法的方法是将有时会全部大写的酒店名称大写.如果它们都是小写或大写,我只想把它们大写.我确实遇到了一些帖子中提到的非字母字符的问题,最后做了类似这样的事情:

private static boolean isAllUpper(String s) {
    for(char c : s.toCharArray()) {
       if(Character.isLetter(c) && Character.isLowerCase(c)) {
           return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这个讨论和不同的解决方案(有不同的问题),清楚地表明在commons.lang中需要一个好的实体isAllUpper(String s)方法.

在那之前,我猜这myString.toUpperCase().equals(myString)是最好的方式.

ger*_*rdw 23

现在在StringUtils isAllUpperCase中

  • “它不适用于这个字符串”,猜猜为什么:) (2认同)
  • 它根据其文档完美运行;有一个例子:StringUtils.isAllUpperCase(" ") = false (2认同)

Sim*_*son 15

不幸的是,它不是一个库函数,但它很容易推出自己的函数.如果效率是一个问题,这可能比s.toUpperCase().equals(s)更快,因为它可以提前纾困.

public static boolean isUpperCase(String s)
{
    for (int i=0; i<s.length(); i++)
    {
        if (!Character.isUpperCase(s.charAt(i)))
        {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

编辑:正如其他海报和评论者所指出的,我们需要考虑字符串包含非字母字符时的行为:should isUpperCase("HELLO1")是返回true还是false?上面的函数将返回false,因为'1'不是大写字符,但这可能不是您想要的行为.在这种情况下将返回true的替代定义是:

public static boolean isUpperCase2(String s)
{
    for (int i=0; i<s.length(); i++)
    {
        if (Character.isLowerCase(s.charAt(i)))
        {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)


Kun*_*nal 8

这个if条件可以得到预期的结果:

String input = "ANYINPUT";

if(input.equals(input.toUpperCase())
{
   // input is all upper case
}
else if (input.equals(input.toLowerCase())
{
   // input is all lower case
}
else
{
   // input is mixed case
}
Run Code Online (Sandbox Code Playgroud)

  • @ sigmavirus24它无法处理哪种情况? (2认同)

Mar*_*erg 7

不是我知道的.

您可以复制字符串并将副本转换为大写/小写,并与原始大小写进行比较.

或者创建一个循环,检查单个字符是小写还是大写.


Out*_*mer 5

此方法可能比将String与其大写版本进行比较更快,因为它只需要1次传递:

public static boolean isUpper(String s)
{
    for(char c : s.toCharArray())
    {
        if(! Character.isUpperCase(c))
            return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

请注意,不同的字符集可能存在一些本地化问题.我没有任何第一手经验,但我认为有一些语言(如土耳其语),其中不同的小写字母可以映射到相同的大写字母.


Mik*_*Hay 5

番石榴的CharMatchers倾向于为此类问题提供非常富有表现力和高效的解决方案。

CharMatcher.javaUpperCase().matchesAllOf("AAA"); // true
CharMatcher.javaUpperCase().matchesAllOf("A SENTENCE"); // false
CharMatcher.javaUpperCase().or(CharMatcher.whitespace()).matchesAllOf("A SENTENCE"); // true
CharMatcher.javaUpperCase().or(CharMatcher.javaLetter().negate()).matchesAllOf("A SENTENCE"); // true
CharMatcher.javaLowerCase().matchesNoneOf("A SENTENCE"); // true
Run Code Online (Sandbox Code Playgroud)

的静态导入com.google.common.base.CharMatcher.*可以帮助使它们更简洁。

javaLowerCase().matchesNoneOf("A SENTENCE"); // true
Run Code Online (Sandbox Code Playgroud)