如何使用java检查字符串中的所有字符是否为小写

如何使用java检查字符串中的所有字符是否为小写,java,regex,Java,Regex,我试着这样做,但结果是错误的,请帮帮我 String inputString1 = "dfgh";// but not dFgH String regex = "[a-z]"; boolean result; Pattern pattern1 = Pattern.compile(regex); Matcher matcher1 = pattern1.matcher(inputString1); result = matcher1.matches(); System.out.println(re

我试着这样做,但结果是错误的,请帮帮我

String inputString1 = "dfgh";// but not dFgH
String regex = "[a-z]";
boolean result;

Pattern pattern1 = Pattern.compile(regex);
Matcher matcher1 = pattern1.matcher(inputString1);
result = matcher1.matches();
System.out.println(result);

您就快到了,只是只检查了一个字符

String regex = "[a-z]+";
上面的正则表达式将检查输入字符串是否包含从
a
z


您的解决方案几乎是正确的。正则表达式必须说
“[a-z]+”
-包含一个量词,这意味着您匹配的不是单个字符,而是一个或多个小写字符。请注意,uber-correct解决方案是这样的,它匹配Unicode中的任何小写字符,而不仅仅是来自英文字母表的字符:

"\\p{javaLowerCase}+"
另外请注意,您可以用更少的代码实现这一点:

System.out.println(input.matches("\\p{javaLowerCase}*"));
(这里我也可以使用*量词,它表示零或更多。根据所需的语义进行选择。)

使用以下模式:

String regex = "[a-z]*";
当前模式仅在测试字符串仅为一个字符时有效

请注意,它的功能与它的外观完全相同:它并不真正测试字符串是否为小写,而是测试它是否不包含
[a-z]
之外的字符。这意味着对于像
“a bcd”
这样的小写字符串,它返回false。在Unicode世界中,正确的解决方案是使用函数并在字符串上循环。

应该是这样的

^[a-z]+$
^
是字符串的开头

$
是字符串的结尾

[a-z]+
匹配1到多个小字符


您需要使用量化,如匹配0到多个字符的
*
,匹配1到多个字符的
+
。它们将匹配前面字符或范围的0或1到多倍

为什么要使用正则表达式

String inputString1 = "dfgh";// but not dFgH
boolean result = inputString1.toLowerCase().equals( inputString1 );

你在找什么?您是否试图检查输入仅包含字母?他所说的“小”很可能是指小字母或小写字母letters@RNJ我编辑了谢谢。当你给负面的名声时,请务必发表评论,因为我不知道你为什么这么做。我输入了“small”而不是“lowercase”。真的,反对票是完全没有必要的。清楚的问题,和代码OP已经尝试(这是顺便说一句,干净,编译和运行),明确的答案。谢谢你,它真的帮助了我很多。对于短字符串这是非常好的;对于较长的一个,其O(n)空间要求开始显示。@MarkoTopolnik同意,但问题中没有具体说明。如果只是代码片段中所示的简单情况,我更喜欢它的可读性,而不是常规的表达。旁观者眼中的可读性,对于初学者来说,这可能是一种令人惊讶的方法。如果我选择非正则表达式,我会编写一个涉及
Character.isLowerCase(input.charAt(I))
的循环。这是完全明确的,也是最好的。如果你不使用英语,这是行不通的。考虑到我们也会有非英语用户来到这里,并试图看看“阿尔夫打赌”是否匹配并得到一个“否”,这个答案并不完全正确。@HaakonLøtveit Yes。但我从问题(“[a-z]”)推断OP只对这些角色感兴趣。