与えられた:
String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};
String input = "Up";
stdin
からの入力がdirections
配列内にあるかどうかを確認するにはどうすればよいですか?
ループを作成し、equalを使用してinput
で各項目をチェックできますが、よりエレガントな方法を探しています。
よろしく、ロン
有効な方向の配列をリストに変換します。
_List valid = Arrays.asList(directions)
_
または、次のように直接宣言します。
_List valid = Arrays.asList("UP", "DOWN", "RIGHT", "LEFT", "up", "down", "right", "left")
_
その後、contains
メソッドを使用できます。
_if (valid.contains(input)) {
// is valid
} else {
// not valid
}
_
これは、「Up」などの大文字と小文字が混在する入力には一致しないため、大文字の値だけをリストに保存してからvalid.contains(input.toUpperCase())
を使用する場合があります。
配列をリストに変換してから contains メソッドを使用します。
List mylist = Arrays.asList(directions);
mylist.contains(input);
Containsメソッドは以下を返します。
リストに指定された要素が含まれる場合はtrue。
残念ながら、JavaにはArrays.indexOf()
メソッドがありません。あなたの最善の策は、単純な線形検索を行う小さなユーティリティを記述することです。または、ArrayListに変換することもできます( Arrays.asList()
)およびindexOf() or contains()
を呼び出します。
配列が大きく、速度が懸念される場合は、配列を並べ替えてからArrays.binarySearch().
を使用できます
代わりにArrayList
とそのcontains
メソッドを使用してください
配列だけでなく、文字列の配列について具体的に説明しているため、大文字と小文字を区別しないという問題をエレガントに解決する別のアプローチは、正規表現を使用することです。 Pattern クラスまたはStringの matches method のいずれかを使用します。
if (input.matches("(?i)" + String.join("|", directions))) {
// valid
}
else {
// invalid
}