Как проверить, что массив строк содержит определенную строку?
Учитывая:
String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"};
String input = "Up";
Как проверить, что вход из stdin
находится в массиве directions
или нет?
Я могу сделать цикл и проверить каждый элемент с помощью input
, используя равный, но я ищу более элегантный способ.
Привет, Рон
Ответы
Ответ 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
}