是否有一个现有的库方法来检查字符串在Java中是全大写还是全小写?
我知道Java和其他框架(如ApacheCommonsLang)中有大量的是否有一个现有的库方法来检查字符串在Java中是全大写还是全小写?,java,string,Java,String,我知道Java和其他框架(如ApacheCommonsLang)中有大量的upper()方法,它们将字符串转换为所有大写字母 是否有任何公共库提供类似于isUpper(String s)和isLower(String s)的方法来检查字符串中的所有字符是大写还是小写 编辑: 关于转换为Upper并与此进行比较,有许多很好的答案。我想我应该更具体一点,说我已经想到了,但我希望能够使用现有的方法来实现这一点 关于在apache.commons.lang.StringUtils中可能包含此内容的良好评
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它不能处理哪种情况?功能很棒,很好!+1isUpperCase2
应该是可接受的答案gUtils.isAllUpperCase
显然不适用于大写自然语言句子,例如我们“不起作用”,因为“
不是大写字符。上面的第二种方法应该更恰当地称为不是部分大写
或类似的东西,因为它不包括大写,而是排除小写。
s.chars().filter(UCharacter::isLetter).allMatch(UCharacter::isUpperCase)