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