web-dev-qa-db-ja.com

文字列の配列に特定の文字列が含まれていることを確認するにはどうすればよいですか?

与えられた:

String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};

String input = "Up";

stdinからの入力がdirections配列内にあるかどうかを確認するにはどうすればよいですか?

ループを作成し、equalを使用してinputで各項目をチェックできますが、よりエレガントな方法を探しています。

よろしく、ロン

27
JAN

有効な方向の配列をリストに変換します。

_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())を使用する場合があります。

47
mikej

配列をリストに変換してから contains メソッドを使用します。

List mylist = Arrays.asList(directions);
mylist.contains(input);

Containsメソッドは以下を返します。

リストに指定された要素が含まれる場合はtrue。

5
RanRag

残念ながら、JavaにはArrays.indexOf()メソッドがありません。あなたの最善の策は、単純な線形検索を行う小さなユーティリティを記述することです。または、ArrayListに変換することもできます( Arrays.asList())およびindexOf() or contains()を呼び出します。

配列が大きく、速度が懸念される場合は、配列を並べ替えてからArrays.binarySearch().を使用できます

3
user949300

代わりにArrayListとそのcontainsメソッドを使用してください

3
wmz

配列だけでなく、文字列の配列について具体的に説明しているため、大文字と小文字を区別しないという問題をエレガントに解決する別のアプローチは、正規表現を使用することです。 Pattern クラスまたはStringの matches method のいずれかを使用します。

if (input.matches("(?i)" + String.join("|", directions))) {
    // valid
}
else {
    // invalid
}
0
cviejo