Ищите ценность и продолжайте идти - PullRequest
2 голосов
/ 27 марта 2020

У меня есть программа, у которой есть список элементов.

Затем я ищу строку и пытаюсь найти ее в указанном списке.

Я бы хотел, чтобы это произошло: находит первое вхождение, затем распечатывает его или сохраняет где-то, чтобы я мог использовать его позже (например, выделив выбор пользователя). Затем, как только я снова ищу ту же строку, она должна вернуть мне второе вхождение, затем третье и т. Д. c. Когда он не находит больше случаев, он должен go вернуться к началу и повторить его.

Это грубый пример того, что у меня есть:

public static void main(String[] args) {

        ArrayList<String> exampleList = new ArrayList<String>();

        exampleList.add("string1");
        exampleList.add("john");
        exampleList.add("string2");
        exampleList.add("arnold");
        exampleList.add("string3");

        String inputExample = "str"

        for (String s : exampleList) {

            if (s.contains(inputExample)) {

                System.out.println(s);
                break;
            }

        }

    }

Я добавил break внутри if, поэтому я могу получить только первый результат. Если я удалю его, я получу все результаты.

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

Что происходит в моя программа состоит в том, что будет подсвечен только первый результат (потому что я вышел из l oop) или будет выделен только последний результат (потому что я не вышел из l oop).

Как я могу сделать так, чтобы поиск продолжал с того места, где остановился, официально игнорируя результаты, которые он уже получил?

Ответы [ 3 ]

2 голосов
/ 27 марта 2020

Как отметил @Alex в своем ответе, вы должны использовать iterator и сохранять свои результаты в приватном ArrayList для дальнейшего использования этих результатов поиска.

Если вы не знакомы с iterator, используйте this

Я написал простой класс HighlightingUserInput, который ведет себя как ваши условия. Он выдает первый результат поиска, печатает его и сохраняет в ArrayList, если вы не вышли из программы (или можете добавить кнопку поиска, если пользователь снова нажал кнопку поиска), а затем выдает второй результат поиска, et c.

Не стесняйтесь задавать вопросы, связанные с этой следующей программой.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

public class HighlightingUserInput{

   private static ArrayList<String> resultsString=new ArrayList<>();

   public static void main(String [] args) {

      ArrayList<String > allStrings=new ArrayList<>();

      allStrings.add("string1");
      allStrings.add("john");
      allStrings.add("string2");
      allStrings.add("arnold");
      allStrings.add("string3");

      Scanner scanner=new Scanner(System.in);

      CharSequence userIput=scanner.nextLine();

      Iterator iterator = allStrings.iterator();

      while(!scanner.nextLine().equals("exit")) {

         inner:
         while (iterator.hasNext()) {
            String s = (String) iterator.next();
            if (s.contains(userIput)) {
                System.out.println(s);
                HighlightingUserInput.resultsString.add(s);
                break inner;
            }

         }

         if(!iterator.hasNext())
             iterator = allStrings.iterator();


       }
   }

}
1 голос
/ 27 марта 2020

Вы можете l oop просмотреть свой список, и каждый раз, когда вы найдете строку, вы можете вызывать свой метод, чтобы выделить ее. В качестве альтернативы, если вы хотите получать строки 1 на 1 каждый раз, когда вызываете свой метод, вы можете использовать итератор. При первом вызове вашего метода вы получаете итератор для своего списка и сохраняете его в закрытом поле вашего класса. При последующих вызовах вы используете этот итератор для получения следующей подходящей строки из вашего списка.

0 голосов
/ 27 марта 2020
public static void main(String[] args) {

    ArrayList<String> exampleList = new ArrayList<String>();

    exampleList.add("string1");
    exampleList.add("john");
    exampleList.add("string2");
    exampleList.add("arnold");
    exampleList.add("string3");

    String inputExample = "str";
    int count = 0;
    while(count >= 0){
        System.out.println(customSearch(exampleList, inputExample, count);
        count ++;
        } // write break statement when count reaches to a particular value based on your use case

String customSearch(List<String> words, String searchKey, int count){
    List<String> searchedWords = words.stream().filter(word -> if word.toLowerCase().contains(searchKey.toLowerCase)).collect(Collectors.toList());
    return searchWords.get(count%searchedWords.size());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...