0

Java: Как вернуть true, если обрезанная строка в списке содержит строку?

19

У меня есть задача в Java: я хочу проверить, существует ли строка в списке List<String> myList.

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

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

Однако проблема в том, что myList может содержать строки с пробелами:

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

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

5 ответ(ов)

0

Ваш код на Java 8 с использованием Stream API проверяет, содержит ли список строк значение "B", игнорируя пробелы в начале и в конце каждой строки. Вы используете метод trim(), чтобы удалить лишние пробелы, а затем сравниваете очищенные строки с искомым значением.

Вот краткое объяснение вашего кода:

  1. Вы создаете список строк с пробелами: List<String> myList = Arrays.asList(" A", "B ", " C ");.
  2. Затем вы создаете поток из этого списка с помощью myList.stream().
  3. Метод anyMatch проверяет, существует ли хотя бы один элемент в потоке, который соответствует условию, заданному в лямбда-выражении str -> str.trim().equals("B"). Это условие удаляет пробелы по краям и проверяет, равен ли результат строке "B".
  4. Если такая строка найдена, anyMatch вернет true, в противном случае — false.

Если вам нужно больше информации о методах Stream API или о том, как обрабатывать строки, не стесняйтесь задавать дополнительные вопросы!

0

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

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

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


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

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

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

0

Ваш код проходит по каждому строковому элементу в списке myList и проверяет, содержит ли он искомую строку. Если такая строка найдена, метод возвращает true, иначе — 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;

Такой способ подходит, если вы хотите учитывать пробелы только в начале и конце строк, а не внутри их.

0

Попробуйте это:

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

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

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

Вот почему важно использовать equals для точного сравнения строк.

0

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

Если вы используете Java 8, вы можете просто обрезать строки с помощью однострочного кода:

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

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

if(myList.contains("A")){
    // true
}else{
    // false
}
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь