如何使用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只对这些角色感兴趣。