Zwei Dateien vergleichen

Wahrscheinlich ist dabei kein Problem, wie gesagt ich mach das erst seit einer Woche und komm noch nich so schnell auf gute Ideen. Nächste Problem könnte sein, dass die Dateien gar nicht in Arrays eingelesen werden. Aber is ne gute Idee, danke.

//Edit: Ehm, wird da jetzt auf die länge des Arrays überprüft? Also es muss schon ne komplette Zeichenfolge übereinstimmen wie zb. Bei den 9-Stelligen Zahlen.


MFG
 
Zuletzt bearbeitet:
Hm, ich würds vielleicht so machen. (Habs nicht getestet, habs einfach so runtergetippt, also keine Garantie ;))

Java:
package de.museek.sandkasten;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Vector;


public class JavaForum {
	
	public Test(){
		Vector<String> content_1 = fillVector("c:\\test1.txt");
		Vector<String> content_2 = fillVector("c:\\test2.txt");
		
		for(int i=0;i<content_1.size();i++){
			 for(int x=0;x<content_2.size();x++){
			   if(content_1.get(i) == content_2.get(x)){
			       System.out.println("Wert: "+content_1.get(i)+" hat einen treffer gefunden!!");
			       break;
			    }
			 }
			}
	}
	
	private Vector<String> fillVector(String filename){
		try {
			//Einlesen
			BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(filename))));
			StringBuffer buffer = new StringBuffer();
			String line;
			while( (line = reader.readLine()) != null){
				buffer.append(line);
			}
			reader.close();
			
			//Konvertieren und als Vector speichern
			StringTokenizer tokenizer = new StringTokenizer(buffer.toString(), " ;,, ");
			
			Vector<String> result = new Vector<String>();
			while(tokenizer.hasMoreTokens()){
				result.add(tokenizer.nextToken());
			}
			return result;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	
	public static void main(String[] args) {
		new JavaForum();
	}
}
 
Zuletzt bearbeitet von einem Moderator:
Muss ganz ehrlich sagen, sieht ja schön aus aber ich kapier jetzt grad gar nich was genau der Code jetzt macht. :(
 
Naja, in Z. 27 ist ne Methode zum einlesen der Datei. Die daten werden direkt in einen Stringbuffer geschrieben. Anschließend werden die Inhalte des Stringbuffers mit Hilfe des Tokenizers gesplittet.

die fertigen Zeilen übergebe ich dann an die beiden Vetoren im Konstruktor und dann werden die beiden Vectoren bzw die Zeilen verglichen.

Hab ich da was falsch verstanden?
Gruß
Christian
 
Achso, aber nun werden die Zeilen nicht mehr zerlegt oder? Also müsste ich da irgendwo nochmal meine ganzen If Anweisungen einbauen denn ganze Zeilen können leider nicht verglichen werden weil die Zeichenfolgen in Dat A und B völlig verschieden sind. Also nicht völlig verschieden aber die Zeichenfolgen die verglichen werden sollen werden eben in der einen Datei noch von Wörtern, Klammern und Doppelpunkten unterbrochen.
zb. in Datei A siehts so aus: 12345678
1
sieht in Datei B so aus:
12345678ABlabla:1
es sollen aber nur die 12345678 und die 1 einzeln verglichen werden.
 
jo, dann mach doch in die while sc hleife des tokenizers einfach eine prüfunhg ob es sich um ints handelt.
 
Also für den Fall das Du nur Zahlen suchst:

Code:
.....

String[] gesuchtezeichen = new String[10];
for(int temp = 0;temp<10;temp++){
    gesuchtezeichen[temp]=String.valueOf(temp);
}
     
StringTokenizer tokenizer = new StringTokenizer(buffer.toString(), ""); 
Vector<String> result = new Vector<String>();            
while(tokenizer.hasMoreTokens()){                
for(int temp2=0;temp2<temp.length;temp2++){
   String eingelesenesZeichen = tokenizer.nextToken();
   if(eingelesenesZeichen.equals(gesuchtezeichen[temp2]){          
            result.add(eingelesenesZeichen);      
    }
        
}           
return result;
.....

So dürften dann alle Zeichen ausser denen die Du suchst(in dem Fall Zahlen) in dem jeweiligen Vector gespeichert werden...
 
Hups kleiner Gedankenholpler...besser so;-):

Code:
Vector<String> result = new Vector<String>(); 
String eingelesenesZeichen;           
while(eingelesenesZeichen=tokenizer.nextToken!=null)){                
for(int temp2=0;temp2<temp.length;temp2++){
      if(eingelesenesZeichen.equals(gesuchtezeichen[temp2]){          
            result.add(eingelesenesZeichen);      
    }
        
}           
return result;
 
Nutze statt dem Vector lieber eine ArrayList. Die ist vom Zugriff her wesentlich schneller.

MFG

Sascha
 
Also ich habe etwas rumgetüftelt, wie ja schon gesagt wurde wäre es sinnvoller beide Dateien in einer Methode einzulesen.
Ich habe jetzt trotzdem erstmal zwei Methoden gelassen weil mir die Zeit fehlt alles nochmal neu zu schreiben denn die Aufgabe müsste in ca. 4 std fertig sein.
Habe nun versucht beide Dateien in Arrays einzulesen und diese miteinander zu vergleichen jedoch bin ich mir nicht wirklich sicher wo genau ich die Arrays einbauen muss.


mfg
 
Zurück