2012-11-13 8 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]+" —には、1文字に1つ以上の小文字がマッチしていないことを意味する数量詞が含まれている必要があります。

"\\p{javaLowerCase}+" 

また、あなたがはるかに少ないコードでこれを達成できることに注意してください:

ユニコードで 任意の小文字の文字に一致し、だけでなく、それらの英語のアルファベットからユーバー-正解は、このことに注意してください
System.out.println(input.matches("\\p{javaLowerCase}*")); 

(。。ここでは、私が代わりにゼロ以上を意味し、*数量詞を使用しています希望のセマンティクスに応じて選択してください)

+0

本当にありがとうございました。 – sunleo

2

このパターンを使用します。

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

現在のパターンは、テストされた文字列が1文字のみの場合にのみ動作します。

文字列が小文字であるかどうかは実際にはテストされませんが、[a-z]以外の文字は含まれていないかどうかはまったく同じです。つまり、"àbcd"のような小文字の文字列に対してはfalseを返します。 Unicode世界での正しい解決策は、Character.isLowercase()関数を使用して文字列をループすることです。それは

^[a-z]+$ 

^でなければなりません

+0

ありがとうございました。 – sunleo

+0

英語を使用していない場合、これは機能しません。私たちが英語以外のユーザーもここに来て、 "ålphåbet"が一致していないかどうかを調べようとしていることを考えれば、この答えは完全ではありません。 –

+0

@ HaakonLttitはい。しかし、OPはそれらの文字にしか興味がないという質問(「[z]」)から推測しました。 –

2

は、文字列の先頭

$文字列

の終わりです

[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))'を含むループを書くだろう。これは、完全に明示的かつ優れたものです。 –

関連する問題