#java #string #startswith
#java #строка #начинается с
Вопрос:
Я создал автозаполнение, которое должно показывать пользователям результаты после их фильтрации startsWith
.
Например, если пользователи ищут «гарри Поттер», мне хотелось бы, чтобы он возвращал результаты, начинающиеся с «гарри Поттер», но я получаю все результаты, начинающиеся с «гарри», например, пробел между словами разрывает фразу.
Как я могу использовать startsWith
строку из 2 слов?
Я использую:
for (String item : autoBookNames) {
if (item.toLowerCase().startsWith( query.toLowerCase() )) {
filteredTitles.add( item );
}
}
Комментарии:
1. Вы уверены, что
query.toLowerCase()
это возвращает «гарри Поттер»? Если вы уверены, то, может быть, попробуйте вместо этого регулярное выражение ?
Ответ №1:
Я создал простой основной класс Java, и кажется, что ваш код работает:
public static void main(String[] args){
String query = "Harry Potter";
List<String> filteredTitles = new ArrayList<>();
List<String> autoBookNames = new ArrayList<>();
autoBookNames.add("Harry potter: Adfg");
autoBookNames.add("Harry Potter: SDFSDF");
autoBookNames.add("Not harry potter title");
autoBookNames.add("Harry potter is awesome");
autoBookNames.add("Narnia is better than Harry Potter");
autoBookNames.add("Lord of Rings");
for (String item : autoBookNames) {
if (item.toLowerCase().startsWith( query.toLowerCase() )) {
filteredTitles.add( item );
}
}
filteredTitles.forEach(System.out::println);
}
Вывод:
- Гарри Поттер: Adfg
- Гарри Поттер: SDFSDF
- Гарри Поттер потрясающий
Возможно, основная проблема заключается в сравнении startWith в вашем элементе и в вашем запросе.
Комментарии:
1. Мне нужно было использовать filteredTitles.clear(), поскольку он сохраняет предыдущие результаты.
2. Я рад, что вы это исправили
Ответ №2:
import java.util.ArrayList;
public class JavaPractice {
public static void main(String[] argh){
String[] autoBookNames = {
"Harry potter is ossm",
"Harry potter is Great",
"Harry",
"Joe"
};
ArrayList<String> filteredTitles = new ArrayList<String>(5);
for (String item : autoBookNames) {
if (item.toLowerCase().startsWith( "harry potter" )) {
filteredTitles.add( item );
}
}
System.out.println(filteredTitles);
}
}
Я запустил этот код. Все работает нормально. Вывод [Гарри Поттер — это ossm, Гарри Поттер великолепен]. Возможно, есть какая-то проблема query.toLowerCase()
. Посмотрите, что она возвращает. Вы обнаружите проблему.