Подтвердить что ты не робот

Как проверить, что массив строк содержит определенную строку?

Учитывая:

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

String input = "Up";

Как проверить, что вход из stdin находится в массиве directions или нет?

Я могу сделать цикл и проверить каждый элемент с помощью input, используя равный, но я ищу более элегантный способ.

Привет, Рон

4b9b3361

Ответ 1

Преобразование массива действительных направлений в список:

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
}

Обратите внимание, что это не будет соответствовать смешанному вводу ввода, например "Вверх", поэтому вы можете сохранить только верхние значения в списке, а затем использовать valid.contains(input.toUpperCase())

Ответ 2

Преобразуйте массив в список и используйте метод contains.

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

Возвращает метод contains:

true, если список содержит указанный элемент.

Ответ 3

Используйте ArrayList вместо этого и его метод contains

Ответ 4

К сожалению, Java не имеет метода Arrays.indexOf(). Лучше всего написать небольшую утилиту для простого линейного поиска. Или вы можете преобразовать в ArrayList (см. Arrays.asList()) и вызвать indexOf() or contains().

Если массив большой и скорость вызывает беспокойство, вы можете отсортировать массив, а затем использовать Arrays.binarySearch().

Ответ 5

Поскольку мы конкретно говорим о массивах строк, а не только о каком-либо массиве: другой подход, который изящно решает вопрос об отсутствии регистра, будет использовать регулярные выражения. Либо через Pattern, либо метод String .

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