Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个现有的库方法来检查字符串在Java中是全大写还是全小写?_Java_String - Fatal编程技术网

是否有一个现有的库方法来检查字符串在Java中是全大写还是全小写?

是否有一个现有的库方法来检查字符串在Java中是全大写还是全小写?,java,string,Java,String,我知道Java和其他框架(如ApacheCommonsLang)中有大量的upper()方法,它们将字符串转换为所有大写字母 是否有任何公共库提供类似于isUpper(String s)和isLower(String s)的方法来检查字符串中的所有字符是大写还是小写 编辑: 关于转换为Upper并与此进行比较,有许多很好的答案。我想我应该更具体一点,说我已经想到了,但我希望能够使用现有的方法来实现这一点 关于在apache.commons.lang.StringUtils中可能包含此内容的良好评

我知道Java和其他框架(如ApacheCommonsLang)中有大量的
upper()
方法,它们将字符串转换为所有大写字母

是否有任何公共库提供类似于
isUpper(String s)
isLower(String s)
的方法来检查字符串中的所有字符是大写还是小写

编辑:

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

关于在apache.commons.lang.StringUtils中可能包含此内容的良好评论。 有人甚至提交了一个补丁(20090310)。希望我们很快就能看到。

编辑:

我需要这种方法的目的是,将酒店的名称大写,有时这些名称都是大写的。我只想在它们都是小写或大写时将它们大写。 我确实遇到了一些帖子中提到的非字母字符的问题,最后做了如下事情:

private static boolean isAllUpper(String s) {
    for(char c : s.toCharArray()) {
       if(Character.isLetter(c) && Character.isLowerCase(c)) {
           return false;
        }
    }
    return true;
}
这个讨论和不同的解决方案(不同的问题)清楚地表明,commons.lang中需要一个好的solid isAllUpper(String s)方法

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

我不知道

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


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

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

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

    return true;
}

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

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


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

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

public static boolean isUpperCase(String s)
{
    for (int i=0; i<s.length(); i++)
    {
        if (!Character.isUpperCase(s.charAt(i)))
        {
            return false;
        }
    }
    return true;
}
公共静态布尔值为大写(字符串s)
{
对于(inti=0;i试试这个,可能会有帮助

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();
}

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

现在在StringUtils中,此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
}
番石榴往往提供非常有表现力和有效的解决方案,这类问题

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

如果您希望输入字符串很短,可以按照您的建议使用
myString.toUpperCase().equals(myString)
。它很短,而且很有表现力

但您也可以使用流:

boolean allUpper=myString.chars().noneMatch(Character::isLowerCase);

我意识到这个问题已经很老了,但是公认的答案使用了一个不推荐使用的API,还有一个问题是关于如何使用ICU4J实现它。我就是这样做的:

s.chars().filter(UCharacter::isLetter).allMatch(UCharacter::isUpperCase)

这里是我提出的一个解决方案,它有点通用性,因为它不需要任何库或特殊的导入,可以与任何版本的Java一起工作,只需要一个过程,并且应该比任何基于正则表达式的解决方案都快得多:

公共静态最终布尔值isUnicaseString(字符串输入){
char[]carr=input.toCharArray();
//获取第一个字母的索引
int i=0;
对于(;i
查看@是否有一天会将其添加到apache commons中请注意,toCharArray()将创建字符串的副本。我建议改用旧的chatAt()。在土耳其语中,大写和小写都是一样的,只是映射不同于其他所有语言环境。特别是“I”有一个umlaut在切换大小写时切换。德语eszet在变为大写时会转换为两个字符。如果字符串包含非字母字符(如“2”),此方法不是很有用。它可能无法很好地处理字母表中没有大小写或补充范围字符的字母(32位代码点)。@McDowell公认的答案提到了
StringUtils.isAllUpperCase
,也有同样的缺陷。一个英文大写句子,如“不会起作用”将返回false。这不会处理任何可能的字符串。相反,这只处理已知的字符串子集,并且我假设OP想要任何可用的字符串string@sigmavirus24它不能处理哪种情况?功能很棒,很好!+1
isUpperCase2
应该是可接受的答案gUtils.isAllUpperCase
显然不适用于大写自然语言句子,例如我们“不起作用”,因为
不是大写字符。上面的第二种方法应该更恰当地称为
不是部分大写
或类似的东西,因为它不包括大写,而是排除小写。
s.chars().filter(UCharacter::isLetter).allMatch(UCharacter::isUpperCase)