2012-11-13 13 views
6

kullanılarak küçük harfli ancak bunun yanlış verir nasıl kontrol etmek, banaDizgedeki tüm karakter Böyle çalıştı 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

Neye bakıyorsunuz? Girişin sadece harf içerdiğini kontrol etmeye mi çalışıyorsunuz? – RNJ

+0

'küçük' ile büyük olasılıkla küçük harf veya 'küçük harf' anlamına gelir – jbx

+0

@RNJ I düzenlenmiş teşekkür ederim. – sunleo

cevap

15

Çözümün neredeyse hatasız olması için a gelen herhangi bir karakter numarasını içerebilir eğer

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

yukarıdaki regex kontrol ederim. Normal ifade, "[a-z]+" — bir niceleyiciyi içermelidir; bu, tek bir karakteri eşleştirmediğiniz anlamına gelir, ancak bir veya daha fazla küçük harfli karakter. Not Unicode herhangi küçük kömürü ile eşleşir ve sadece İngiliz alfabesi gelenler, bu uber-doğru çözüm:

Ayrıca
"\\p{javaLowerCase}+" 

sen çok daha az kod ile bunu başarabilirsiniz unutmayın:

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

(burada alternatif olarak sıfır ya da daha fazla anlamına gelir * nicelik, kullanıyorum seçim, istenen anlam göre yöntem.).

+0

Teşekkür ederim, bana gerçekten çok yardımcı oluyor. – sunleo

2

için bu model:

Test edilen dize bir karakter yalnızca ise
String regex = "[a-z]*"; 

Geçerli desen çalışır.

Tam olarak göründüğü şeyi yaptığına dikkat edin: dize küçükse, ancak [a-z] dışarısında chars içermiyorsa gerçekten sınanmaz. Bu, "àbcd" gibi küçük harf dizileri için false döndürdüğü anlamına gelir. Unicode dünyasında doğru bir çözüm, Character.isLowercase() işlevini kullanmak ve dizenin üzerine döngü yapmak olacaktır.

+0

Teşekkür ederim yardımcı olur. – sunleo

+0

İngilizce kullanmıyorsanız bu çalışmaz. İngilizce olmayan kullanıcıların da buraya gelip "ålphåbet" ile eşleşip eşleşmediğini görmeye çalışacağımız düşünüldüğünde, bu cevap tamamen doğru değil. –

+0

@ HaakonLøtveit Evet. Ancak, OP'nin sadece bu karakterlerle ilgilendiği sorusundan ("[a-z]") çıkmıştım. –

2

O

^[a-z]+$ 

^ dize

$ başlangıcıdır olmalıdır Sen quantifies kullanmak gerekir

[a-z]+ maçlar 1 sayıda küçük karakterlerle

dizenin sonudur * gibi 0'a çok sayıda karaktere sahipBirçok chars..They 1 ila maçlarıönceki karakteri veya aralık

+0

Teşekkür ederim yardımcı olur. – sunleo

0

birçok kez 0 veya 1 maçları Neden normal bir ifade ile rahatsız olur?

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

Kısa dizeler için bu gayet iyi; Daha uzun olanlar için O (n) uzay gereksinimi göstermeye başlar. –

+0

@MarkoTopolnik Anlaştık ama soruda hiçbir şey belirtilmedi. Sadece kod snippet'inde gösterildiği gibi basit bir durum için olsaydım, bunun normal bir ifadeyle okunabilirliğini tercih ederim. – Robin

+1

Okunabilirlik, gözlemcinin gözünde, yeni başlayanlara şaşırtıcı bir yaklaşım olabilir. Regeeks olmayanlar için gidersem, 'Character.isLowerCase (input.charAt (i)) 'içeren bir döngü yazarım. Bu hem açık hem de en üst düzey performans. –

İlgili konular