文字列入力にアルファベット以外の文字が含まれているかどうかを確認したいと思います。以下は私の現在のコードです:
if ((name.charAt(i) >= 'a' && name.charAt(i) <= 'z') ||
((name.charAt(i) >= 'A' && name.charAt(i) <= 'Z')))
name.charAt(i)
「と等しくないかA
、Z
またはと」のチェックとして機能するようにコードを変更するにはどうすればよいa
ですz
か?
条件を否定するだけです:
if (!((name.charAt(i) >= 'a' && name.charAt(i) <= 'z') || ((name.charAt(i) >= 'A' && name.charAt(i) <= 'Z'))))
String str = "1234";
if(!str.matches("[a-zA-Z]+")){
System.out.println("not contains alphabets");
}else{
System.out.println("contains alphabets");
}
これに対する体系的なアプローチを示します。これは、他の同様の状況で役立つ可能性があります。まず、読みやすくするために、char をローカルの var に抽出します。
char ch = name.charAt(i);
if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') ...
これで、DeMorgan の法則の観点からこれを扱うことができます。簡単にするために、各部分にいくつかのヘルパー ブール変数を宣言します。
boolean a = ch >= 'a',
z = ch <= 'z',
A = ch >= 'A',
Z = ch <= 'Z';
だから、私たちはあなたの元の表現を
(a && z) || (A && Z)
その式の否定が必要です。
!(a && z || A && Z)
きれいにしましょう。申し込み
取得するため
!(a && z) && !(A && Z)
次に、適用します
内部式に:
(!a || !z) && (!A || !Z)
ここで、元の式を元に戻し、否定<=
を に>
、>=
に置き換え<
ます。
(ch < 'a' || ch > 'z') && (ch < 'A' || ch > 'Z')
これはあなたが探している否定された式であり、明示的な否定が削除されています。
大文字と小文字の文字を比較する代わりに、 Character.isLetter(char c) メソッドを使用して、両方のケースをチェックします。
char[] chars = name.toCharArray();
boolean isAlphabet = true;
for (char c : chars) {
if (!Character.isLetter(c)) {
//if character is not A-Z or a-z
isAlphabet = false;
}
}