java - читать пользовательский ввод и печатать строку, если она дублируется - PullRequest
0 голосов
/ 19 сентября 2019

Итак, я учусь читать текстовые файлы в java и пытаюсь написать программу, которая читает пользовательский ввод по одной строке за раз и выводит текущую строку, если и только если она является дубликатом какой-либо предыдущей строки.Это часть кода, с которой я борюсь, и мне было интересно, смогу ли я получить толчок в правильном направлении.Прямо сейчас он запрашивает ввод данных пользователем, и когда я пишу строку и нажимаю ввод, программа завершается, ничего не печатая.

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
    Set<String> s = new HashSet<String>();


    while(true) {
        String line = r.readLine();
        if(s.contains(line)) {
            s.add(line);
        }else {
            break;
        }
    }


    for (String text : s) {
        w.println(text);
    }       
}

1 Ответ

1 голос
/ 19 сентября 2019

Вы можете сохранить два изменяемых состояния, одно для всех строк и одно для дублирующих строк.

Пример ниже.(Вы можете выйти из программы на :q).

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;

public class CheckDupes {

    public static void main(String[] args) throws IOException {
        Set<String> lines = new HashSet<String>();
        Set<String> duplicateLines = new HashSet<String>();

        BufferedReader stdReader =
                new BufferedReader(new InputStreamReader(System.in));

        String line = null;
        while (!(line = stdReader.readLine()).equals(":q")) {
            if (lines.contains(line)) {
                duplicateLines.add(line);
            } else {
                lines.add(line);
            }
        }

        duplicateLines.forEach(l -> System.out.println(l));
    }

}

Ввод / вывод

love is great
weather is good
software is version 4
weather is good
love is great
:q
weather is good
love is great
...