Поиск по текстовому файлу с помощью нескольких переменных - PullRequest
0 голосов
/ 12 декабря 2018

В основном я хочу найти свой текстовый файл с несколькими переменными.

Мой код пока:

    public boolean searchStudent() throws IOException {
        Path p = Paths.get("src", "inware", "users.txt");
        Scanner in = new Scanner(p);
        boolean i = false;

        String search =search_field.getText();
        String[] search1 = search.split("[,]");

        String format = "%-10s %20s %20s %20s %20s %20s %20s %20s %20s %20s %20s %20s %20s %20s %20s %20s %20s %20s\n";
        rsl.append(String.format(format,"Όνομα:","Επίθετο:","Φύλο:","Ημ. Γέννησης:","Τάξη:","Όνομα Κηδεμόνα:","Επώνυμο Κηδεμόνα:","Τηλ. Κηδεμόνα:","Συν. Απουσίες:","Ημ. Τελ. Απουσίας:","Αρ. Τελ. Απουσίας:","Μάθημα 1:","Μάθημα 2:","Μάθημα 3:","Μάθημα 4:","Μάθημα 5:","Μάθημα 6:","Μ.Ο.:"));
        while (in.hasNext()) {
            String line = in.nextLine();
            String[] fields = line.split("[,]");

            if (line.contains(search1[0])&& line.contains(search1[1])) { //What i must put here???
                    rsl.append(String.format(format,fields[4],fields[5],fields[6],fields[7],fields[8],fields[9],fields[10],fields[11],fields[12],fields[13],fields[14],fields[15],fields[16],fields[17],fields[18],fields[19],fields[20],fields[21]));
                i = true;
            }
        }
    }
        result.setText(rsl.toString());
        in.close();
        return i;
    }

Поиск работает, но для того, чтобы работать, я должен каждый раз ставитьдве переменные, но я хочу быть свободным (имеется в виду работа с 1 или 2 или более переменными поиска).

Так что, если в строке есть эти (1, 2 или более) переменные внутри, чтобы отобразить их ...

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Добавьте этот метод

private boolean containsAll(String line, String... matchers)
    {
            for (String matcher : matchers)
            {
                    if (!line.contains(matcher))
                    {
                            return false;
                    }
            }
            return true;
    }

А затем используйте

if (containsAll(line, search1[0], search1[1])
0 голосов
/ 12 декабря 2018

Предполагая, что вы хотите проверить для всех элементов в search1, вы можете создать функцию, которая выполняет проверку, используя цикл for:

public static boolean containsOneOrMore(String text, String[] search) {
    for (String s : search) {
        if (!text.contains(s)) {
            return false;
        }
    }
    return true;
}

И чем в if становится:

if (containsOneOrMore(line, search1)) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...