ユーザーに3文字の文字列を入力するように求めるプログラムがあります。文字列は、a、b、または c の組み合わせのみにすることができます。
何百万もの条件ステートメントを実行せずに、文字列に指定された文字以外の文字が含まれているかどうかを確認するにはどうすればよいですか。
疑似例:
String s = "abq"
if (s.containsOtherCharacterThan(a,b,c))
System.exit(-1)
a、b、またはc以外の文字を探すには、次のようなものを使用します。
if(!s.matches("[abc]+"))
{
System.out.println("The string you entered has some incorrect characters");
}
正規表現とその文字クラスを使用できます。String#matches(String regex)
正規表現で完全に一致するかどうかを確認する文字列を呼び出すだけです。
if (!s.matches("[abc]+")) {//..
このテストは、で指定された他の文字も含む文字列のみに合格する必要があるため、が含まれている[
]
ため"abq"
合格する必要がありますq
。一致は、、、および文字のみが含まれているかどうかをチェックしますs
。そうでない場合は戻り、否定のおかげでifブロックに入ります。a
b
c
false
文字列を配列に分割し、そこからの入力をループして、各文字を比較できます。
public boolean containsOtherCharacter(String s, String a, String b, String c) {
String[] st = s.split("");
for(int x = 0; x < st.length; x++)
if (st[x].compareTo(a) != 0 && st[x].compareTo(b) != 0 && st[x].compareTo(c) != 0)
return true;
return false;
}
これにより、他の文字があるかどうかがわかります。それらがどの文字であるかを知りたい場合は、キーが文字で、値が使用回数である HashMap に各文字を挿入できます。
この正規表現を使用できます:- [abc]+
。
正規表現を使用しない方法は、文字列をループして各文字をチェックし、文字がa、b、またはc以外の場合は終了することです。String.containsだけでそれを行う方法はありません