ich hab momentan ein kleines Problem und hoffe mir kann hier jemand helfen.
Im wesentlichen vergleiche ich über diesen Code 2 Dateien miteinander:
Java:
publicstaticbooleancompareFiles(File f1,File f2){boolean same =true;try{BufferedReader in1 =newBufferedReader(newFileReader(f1));BufferedReader in2 =newBufferedReader(newFileReader(f2));String inText1,inText2;while((inText1 = in1.readLine())!=null){
inText2 = in2.readLine();if((inText2==null)||(!inText1.equals(inText2))){
same =false;break;}}}catch(FileNotFoundException e){
e.printStackTrace();
same =false;}catch(IOException e){
e.printStackTrace();
same =false;}return same;}
Mein Problem ist nun, dass ich gerne eine gewisse Toleranz einfügen würde, bei "readline();", da ich mit diesem Code 2 Html Dateien vergleiche, welche sich in meinem Falle sowieso(auch wenn sie quasi gleich sind) immer um ca 2-3 Zeichen unterscheiden - bei diesen möchte ich, dass sie trotzdem diesen Test bestehen und vom Programm als gleich betrachtet werden.
Mir kam bisher die Idee, dass man einen Zähler einfügen könnte, für jedesmal wenn readline() nicht gleich ist und daraus eine Abbruchbedingung basteln könnte, jedoch wäre 1 ganze Zeile die anders ist schonwieder zu viel, das hab ich dann beim Testen gemerkt.:bahnhof:
Ich hoffe, ich hab das ganze einigermaßen verständlich formuliert.
Ich weiß zwar nicht genau was du mit der abbruchbedingung sagen willst aber wenn du zwei dateien mit einander vergleichen willst un ne gewisse fehlerquote ok findest,
würde ich dir zum einzelnen durchlaufen un vergleichen raten.
Soll heißen,
für jede zeile in f1 vergleich sie mit der entsprechenden zeile in f2
das ganze umgedreht (weil f2 vllt größer als f1 ist)
dabei werdn 2 zähler beigehalten
am ende vergleichen wir die beiden zähler noch mit einander und sind happy dasses tut
Ich hab dir das ganze mal etwas ausgearbeitet, obs für deine zwecke reicht weiß ich net aber sollte theoretisch bei 51% gleichheit ein true geben.
Java:
publicstaticbooleancompareFiles(File f1,File f2){int ungleich =0;int gleich =0;boolean same =true;try{BufferedReader in1 =newBufferedReader(newFileReader(f1));BufferedReader in2 =newBufferedReader(newFileReader(f2));while(in1.readLine()!=null){if(in1.readLine().equals(in2.readLine())){
gleich++;}else{
ungleich++;}}/*
* Leider muss ich die Files neu einladen
* mit mark und reset sollte das besser gehn aber
* da fehlt mir das verständnis für das mark
*/
in1 =newBufferedReader(newFileReader(f1));
in2 =newBufferedReader(newFileReader(f2));while(in2.readLine()!=null){if(in2.readLine().equals(in1.readLine())){
gleich++;}else{
ungleich++;}}if(gleich > ungleich){
same =true;}}catch(Exception e){
e.printStackTrace();
same =false;}return same;}
Mein Problem ist nun, dass ich gerne eine gewisse Toleranz einfügen würde, bei "readline();", da ich mit diesem Code 2 Html Dateien vergleiche, welche sich in meinem Falle sowieso(auch wenn sie quasi gleich sind) immer um ca 2-3 Zeichen unterscheiden - bei diesen möchte ich, dass sie trotzdem diesen Test bestehen und vom Programm als gleich betrachtet werden.
Was heißt denn, dass zwei Zeilen ähnlich sind? Kannst du genauer formulieren, wann das der Fall ist? Wo ist die Toleranzgrenze?
Und noch eine andere Frage: Muss es unbedingt equals() sein? Viele Strukturen hängen von dieser Methode ab, und da sollten Toleranzen sehr wohl überlegt sein, sonst gibt es böse Überraschungen.
Vielen Dank für die Anregungen und natürlich Odin, der sich extra die Mühe gemacht hat und mir den Code überarbeitet hat.
Schlussendlich bin ich jetzt bei dem Vergleich per Array geblieben wie M4x0r es vorgeschlagen hat, da es bei mir ja wie im 1. Post erwähnt um Zeichen und nicht um Reihen ging, bei denen der Fehler auftrat. Warum es jetzt um Zeichen geht und nicht wie geplant um Reihen müsste ich jetzt nochmal ergründen, jedoch löst dies erstmal mein Problem
Warschl. werde ich(da grade dies sehr wichtig ist bei mir) einfach per Argument übergeben wie hoch die Toleranz sein darf.