Błędny warunek == błędny output

0

Cześć, mam problem z funkcją którą porównuje dwa pliki *.txt. Na wyjściu chciałbym dostać linie która jest błędna (Linia = 4) natomiast dostaje:
Linia = 4
Linia = 4
Linia = 6
Linia = 6
Linia = 4
Linia = 6
Linia = 4

BufferedReader bR1 = new BufferedReader(new FileReader("text1.txt"));
        BufferedReader bR2 = new BufferedReader(new FileReader("text2.txt"));

        String line1 = bR1.readLine().trim();
        String line2 = bR2.readLine().trim();
        int lineNum = 1;
        int lineNum2 = 1;
        List<String> result = new ArrayList<String>();
        List<String> result2 = new ArrayList<String>();

        while (line1 != null || line2 != null) {
            if(line2 == null){
                line1 = bR1.readLine();
                bR2.close();
                bR2 = new BufferedReader(new FileReader("text2.txt"));
                lineNum2 = 1;
                lineNum++;
            }
            if (line1 == null && line2 == null) {
                break;
            } 
            if (line1.equalsIgnoreCase(line2)) {
                result.add("Linia = " + lineNum);
            } else{
                result2.add("Linia = " + lineNum2);
            }
            line2 = bR2.readLine();
            lineNum2++;

        }
        result2.removeAll(result);
        for (String s : result2) {
            System.out.println(s);
        }

text1.txt
To jest pierwsza linia
w przykładowym pliku.
Są też jakieś kolejne.
Siema
A tu jest ok
text2.txt
To jest pierwsza linia
w przykładowym pliku.
Są też jakieś kolejne.
Tak to jest linia której nie ma w text1
A tu jest ok

Proszę o radę co jest źle a może czego brakuje?

0

Nikt nic ;) ?

0

Zdefiniuj zadanie, które chcesz zrobić. Bo z kodu nie wynika dokładnie - co to znaczy, że linia jest błędna ?

1

Ja bym wrzucil pliki do list linia po linii, a potem juz prosto.

0

Chce wyłapać różnice/ brak lini między dwoma plikami, biorę linię x z pliku 1 i lęce po 2 pliku w poszukiwaniu lini jeśli w pliku 2 nie ma już lini biorę drugą linię itd.
I teraz chce wypisać tylko te linie które się różnią/ nie ma ich w pliku 2.

0

NIe wiem czy dobrze rozumiem - ale jeśli nie robisz Diff (kolejność liniw w txt2 nie ma znaczenia - ważne czy występuje).
To wtedy możesz napisać tak:

 public static void main(final String ... args) throws IOException {
        final List<String> txt1 = Files.readAllLines(Paths.get("text1.txt"));
        final Set<String> txt2 = new HashSet<>(Files.readAllLines(Paths.get("text2.txt")));
        IntStream.range(0, txt1.size()).forEach( index ->  {
            final String text = txt1.get(index);
            if ( !txt2.contains(text))  {
                System.out.println("Linia = " + (index + 1));
            }
        });
    }

Da się ładniej z użyciem VAVr - ale to nie ta lekcja.

0

No w sumie to chodzi mi o takiego Diff'a ale w sensie lini, więc kolejność lini ma znaczenie.
Kiedy biorę jedną linie z pliku 1 i jadę przez cały plik 2 chodzi mi o to aby wyłapywać ewentualne przesunięcia linii, dlatego jeżeli linia 1 występuje w pliku 2 to nie chciał bym jej dodawać do listy, natomiast jeżeli jakiejś z linii nie ma w pliku 2 to chcę ją dodać do listy i wiedzieć że lini 3 nie ma w pliku 2.

0

Rzeczywiście, kurcze za pomocą Javy8 kilka linijek i gotowe ..
Dziękuje bardzo :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0