Java: Как вернуть true, если обрезанная строка в списке содержит строку?
У меня есть задача в Java: я хочу проверить, существует ли строка в списке List<String> myList
.
Что-то вроде этого:
if(myList.contains("A")){
// true
}else{
// false
}
Однако проблема в том, что myList может содержать строки с пробелами:
{' A', 'B ', ' C '}
Я хочу, чтобы при проверке на наличие элемента B
метод возвращал true
, даже если в списке строки с пробелами. Как мне это сделать? Я хотел бы избежать использования циклов.
5 ответ(ов)
Ваш код на Java 8 с использованием Stream API проверяет, содержит ли список строк значение "B", игнорируя пробелы в начале и в конце каждой строки. Вы используете метод trim()
, чтобы удалить лишние пробелы, а затем сравниваете очищенные строки с искомым значением.
Вот краткое объяснение вашего кода:
- Вы создаете список строк с пробелами:
List<String> myList = Arrays.asList(" A", "B ", " C ");
. - Затем вы создаете поток из этого списка с помощью
myList.stream()
. - Метод
anyMatch
проверяет, существует ли хотя бы один элемент в потоке, который соответствует условию, заданному в лямбда-выраженииstr -> str.trim().equals("B")
. Это условие удаляет пробелы по краям и проверяет, равен ли результат строке "B". - Если такая строка найдена,
anyMatch
вернетtrue
, в противном случае —false
.
Если вам нужно больше информации о методах Stream API или о том, как обрабатывать строки, не стесняйтесь задавать дополнительные вопросы!
Вы можете сделать это в одну строку, используя регулярные выражения:
if (myList.toString().matches(".*\\bA\\b.*"))
Этот код должен работать достаточно быстро.
Кстати, вы можете создать регулярное выражение из переменной, вот так:
.matches("\\[.*\\b" + word + "\\b.*]")
Я добавил [
и ]
на каждую сторону, чтобы предотвратить ложное срабатывание, если искомое слово содержит открывающую или закрывающую квадратную скобку в начале или в конце.
Ваш код проходит по каждому строковому элементу в списке 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;
Такой способ подходит, если вы хотите учитывать пробелы только в начале и конце строк, а не внутри их.
Попробуйте это:
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
для точного сравнения строк.
Вы можете использовать свой собственный код. Вам не обязательно использовать циклы, если вы не хотите, как упоминалось выше. Главное - сосредоточиться на удалении пробелов или обрезке строк в списке.
Если вы используете Java 8, вы можете просто обрезать строки с помощью однострочного кода:
myList = myList.stream().map(String::trim).collect(Collectors.toList());
Важно отметить, что в будущем вы сможете использовать этот подход и для других коллекций, таких как Set. Теперь вы можете использовать свой собственный код:
if(myList.contains("A")){
// true
}else{
// false
}
Преобразование 'ArrayList<String>' в 'String[]' в Java
Преобразование списка в массив в Java
Java: как преобразовать List<String> в объединённую строку с помощью join()
Как преобразовать строку Java в byte[]?
Как вывести массив строк без использования цикла for?