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

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

是否有任何公共库提供像isUpper(String s)isLower(String s)来检查isLower(String s)所有字符是大写还是小写?

编辑:

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

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

编辑:

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

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

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

在那之前我想myString.toUpperCase().equals(myString)是最好的方法。

Guava的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 

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

 javaLowerCase().matchesNoneOf("A SENTENCE"); // true 

现在在StringUtils isAllUpperCase中

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

 public static boolean isUpperCase(String s) { for (int i=0; i 

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

 public static boolean isUpperCase2(String s) { for (int i=0; i 

不是我知道的。

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

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

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

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

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

这个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 } 

试试这个,可能有所帮助。

 import java.util.regex.Pattern; private static final String regex ="^[A-Z0-9]"; //alpha-numeric uppercase public static boolean isUpperCase(String str){ return Pattern.compile(regex).matcher(str).find(); } 

使用此代码,我们只需更改正则表达式。

您可以使用java.lang.Character.isUpperCase()然后您可以轻松编写一个方法来检查您的字符串是否为大写(带有一个简单的循环)。

将消息toUpperCase()发送到您的字符串,然后检查结果是否等于您的字符串可能会更慢。