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

Java, возвращает, если List содержит String

В Java я хочу проверить, существует ли строка в List<String> myList.

Что-то вроде этого:

if(myList.contains("A")){
    //true
}else{
    // false
}

Проблема заключается в том, что myList может содержать не обрезанные данные:

{'  A', 'B  ', '  C  '}

Я хочу, чтобы он вернул true, если мой элемент 'B' находится в списке. Как мне это сделать? Я бы хотел избежать структуры цикла.

4b9b3361

Ответ 1

Вам необходимо выполнить итерирование списка и вызвать String#trim для поиска:

String search = "A";
for(String str: myList) {
    if(str.trim().contains(search))
       return true;
}
return false;

ИЛИ если вы хотите выполнить игнорировать поиск в случае, используйте:

search = search.toLowerCase(); // outside loop

// inside the loop
if(str.trim().toLowerCase().contains(search))

Ответ 2

С Java 8 Stream API:

List<String> myList = Arrays.asList("  A", "B  ", "  C  ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));

Ответ 3

Вы можете сделать это в одной строке с помощью регулярного выражения:

if (myList.toString().matches(".*\\bA\\b.*"))

Этот код должен работать достаточно хорошо.


Кстати, вы можете создать регулярное выражение из переменной, например:

.matches("\\[.*\\b" + word + "\\b.*]")

Я добавил [ и ] к каждому концу, чтобы предотвратить ложноположительное совпадение, когда термин поиска содержит квадратную скобку открытия/закрытия в начале/конце.

Ответ 4

String search = "A";
for(String s : myList)
    if(s.contains(search)) return true;
return false;

Это приведет к повторению каждой строки в списке и проверяет, содержит ли она строку, которую вы ищете. Если это только пробелы, которые вы хотите захватить, вы можете сделать это:

String search = "A";
for(String s : myList)
    if(s.replaceAll(" ","").contains(search)) return true;
return false;

который сначала заменит пробелы пустыми строками перед поиском. Кроме того, если вы просто хотите сначала обрезать строку, вы можете сделать:

String search = "A";
for(String s : myList)
    if(s.trim().contains(search)) return true;
return false;

Ответ 5

Попробуйте следующее:

for(String str: myList) {
    if(str.trim().equals("A"))
       return true;
}
return false;

Вам нужно использовать str.equals или str.equalsIgnoreCase вместо contains, потому что contains в string работает не так же, как contains в List

List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true

Ответ 6

Вы можете использовать примерную библиотеку для сопоставления строк для этого, например. SecondString, но это почти наверняка лишний - просто используйте один из приведенных ответов для цикла.

Ответ 7

Вы можете использовать свой собственный код. Вам не нужно использовать циклическую структуру, если вы не хотите использовать циклическую структуру, как вы сказали выше. Только вы должны сосредоточиться, чтобы удалить пробел или обрезать строку списка.

Если вы используете java8, вы можете просто обрезать строку, используя одну строку кода:

myList = myList.stream().map(String :: trim).collect(Collectors.toList());

Важность приведенной выше строки заключается в том, что в будущем вы также можете использовать список или набор. Теперь вы можете использовать свой собственный код:

if(myList.contains("A")){
    //true
}else{
    // false
}