Использовать строку, начинающуюся с фразы

#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);

}
  

Вывод:

  1. Гарри Поттер: Adfg
  2. Гарри Поттер: SDFSDF
  3. Гарри Поттер потрясающий

Возможно, основная проблема заключается в сравнении 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() . Посмотрите, что она возвращает. Вы обнаружите проблему.