2012-11-13 57 views
6

我想这样的小写,但它输出错误,请帮我如何检查字符串中的所有字符是用java

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); 
+0

你在找什么?你是否试图检查输入是否只包含字母? – RNJ

+0

'小'他最可能的意思是小写字母或'小写'字母 – jbx

+0

@RNJ我编辑了谢谢你。 – sunleo

回答

15

你的解决方案是正确的几乎任何数量的字符。正则表达式必须说"[a-z]+" —包含一个量词,这意味着你不匹配单个字符,而是一个或多个小写字符。需要注意的是尤伯杯正确的解决方案,它匹配以Unicode 任何小写字符,而不仅仅是从英文字母,是这样的:

"\\p{javaLowerCase}+" 

此外请注意,您可以用更少的代码实现这一点:

System.out.println(input.matches("\\p{javaLowerCase}*")); 

(我在这里替代地使用*量词,这意味着零个或多个选择根据期望的语义。)

+0

谢谢你真的帮助我很多。 – sunleo

2

使用此图案:

String regex = "[a-z]*"; 

只有被测试的字符串只有一个字符时,您的当前模式才有效。

请注意它的确如此:它并不真正测试字符串是否小写,但是如果它不包含[a-z]之外的字符。这意味着它对于小写字符串如"àbcd"返回false。在Unicode世界中,一个正确的解决方案是使用Character.isLowercase()函数并遍历字符串。

+0

谢谢你的帮助。 – sunleo

+0

如果您不使用英语,这不起作用。考虑到我们会让非英语用户也进来,并试图查看“ålphåbet”是否匹配并得到一个否定,这个答案并不完全正确。 –

+0

@HaakonLøtveit是的。但是我从这个问题(“[a-z]”)中得出结论,OP只对这些角色感兴趣。 –

2

应该

^[a-z]+$ 

^是字符串

$开始是字符串的结尾

[a-z]+比赛1到许多小字符

您需要使用量词像*,它匹配0到很多字符,+匹配1到多个字符..他们会匹配0或1到前几个字符或范围的多次

+0

谢谢你的帮助。 – sunleo

0

为什么要用正则表达式?

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

对于短字符串,这是完全正确的;对于较长时间的O(n)空间需求开始显示。 –

+0

@MarkoTopolnik同意,但没有在问题中指定。如果仅仅是代码片段中所示的简单情况,我更喜欢将这种可读性应用于正则表达式 – Robin

+1

可读性在旁观者眼中,对于初学者来说,它可能是一种令人惊讶的方法。如果我使用非正则表达式,我会写一个涉及'Character.isLowerCase(input.charAt(i))'的循环。这是完全明确的和最高性能的。 –

相关问题