String-Werte nach bestimmten Muster aussortieren/vergleichen

oc-factory

Cadet 3rd Year
Registriert
Aug. 2004
Beiträge
45
Hallo zusammen,

ich sitze gerade vor der Flimmerkiste und bekommen die Knoten nicht mehr aus meinen Hirnzellen heraus :freak::freaky:

Folgendes Szenario:
Unterschiedliche Zeichenkombinationen aus einer Datei, sollen mit anderen unterschiedlichen Zeichenkombinationen aus einer zweiten Datei verglichen werden. Dabei unterscheiden sich beide Dateien vom Inhalt nur durch wenige Zeichenkombinationen. Die Zeichenkombinationen lese ich aus der Datei paarweise ein und vergleiche sie miteinander. Wenn es Unterschiede gibt, wird die betreffende Zeichenkombination, als Hinweis auf den Unterschied, ausgegeben.

Jetzt zum eigentlichen Problem:
Ich möchte die Ausgabe der Unterschiede optimieren, da sich einige Unterschiede bei genauerer Betrachtung stark vereinfachen lassen. Und genau da komme ich nicht weiter und möchte am folgenden Beispiel erklären, was das Problem ist.

UPDATE
Zeichenkombinationen in Datei 1:
AD2 GD2 GV8 SQ1 NPL UBY QSX XBT ZZ4

Zeichenkombinationen in Datei 2:
AD2 DWA GD2 GV8 SQ1 NPL UBY QDR QSX XBT ZZ4

Wenn ich mit meiner aktuellen Methode den Vergleich fahre bekomme ich als Ausgabe:
GD2 GV8 SQ1 NPL UBY QSX XBT ZZ4
DWA GD2 GV8 SQ1 NPL UBY QDR QSX XBT ZZ4
(jeweils mit Positionsangaben)

Der eigentliche Unterschied besteht jedoch darin, dass sich die Zeichenkombinationen "DWA" und "QDR" in Datei 2 befinden, welche aber nicht in Datei 1 sind und daher die nachfolgenden Zeichenkombinationen in Datei 2 nach rechts verschieben.

Das hätte ich gerne als Ausgabe:
___ DWA
___ QDR

___ = Symbolische Kennzeichnung, dass diese Kombination in Datei 1 nicht vorhanden ist)

Die Unterschiede von oben reduzieren sich damit und es verbleiben die beiden eigentlichen Unterschiede.

Hinweis: Die "eingeschobenen" Zeichenkombinationen befinden sich auch nur in Datei 2. Im Beispiel sind es zwei, aber es können auch drei oder noch mehr "eingeschobene" Zeichenkombinationen in einer Zeile sein.

Bitte melden, falls etwas unklar sein sollte :D
 
Zuletzt bearbeitet:
Nicht ganz einfach. Du könntest natürlich alles in einen Container einlesen und sagen, wenn nun ein Unterschied da ist, untersuche jeweils container1 und container[i+1] bis i == container1.size() || i == container2.size(), allerdings würde das erstmal bedeuten, dass es nur einen solchen Unterschied geben kann. Kann es also mehrere solcher Unterschiede geben?
 
badday schrieb:
Kann es also mehrere solcher Unterschiede geben?

Ich zitiere mich mal selbst:
"Die "eingeschobenen" Zeichenkombinationen befinden sich auch nur in Datei 1. Es können aber auch zwei oder drei "eingeschobene" Zeichenkombinationen in einer Zeile sein."

Oder meintest du etwas anderes? Ich hatte einen ähnlichen Ansatz, habe die einzelnen Zeichenkombinationen in jeweils ein Array geladen und mit i+1 (bzw. +x) entsprechend den Versatz damit abzubilden. Ich werde nochmal ein wenig hirnen bzw. testen, aber ich brauch erstmal ne Denkpause :)
Ergänzung ()

Mein vorläufiger Lösungsansatz:

Code:
import java.util.Vector;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		
		String[] code1 = new String[11];
		String[] code2 = new String[11];
		
		code1[0] = "AD2";
		code1[1] = "GD2";
		code1[2] = "GV8";
		code1[3] = "SQ1";
		code1[4] = "NPL";
		code1[5] = "UBY";
		code1[6] = "QSX";
		code1[7] = "XBT";
		code1[8] = "ZZ4";
		code1[9] = "   ";
		code1[10] = "   ";
		
		code2[0] = "AD2";
		code2[1] = "DWA";
		code2[2] = "GD2";
		code2[3] = "GV8";
		code2[4] = "SQ1";
		code2[5] = "NPL";
		code2[6] = "UBY";
		code2[7] = "QDR";
		code2[8] = "QSX";
		code2[9] = "XBT";
		code2[10] = "ZZ4";
		
		int versatz = 0;
		
		Vector<String> code1v = new Vector<String>();
		Vector<String> code2v = new Vector<String>();
		
		for (int i = 0; i < code1.length; i++) {
			
			try {
				//System.out.println(code1[i]+" "+code2[i+versatz]);
				
				if (!code1[i].equals("  ")) {
					
					if (!code1[i].equals(code2[i+versatz])) {
						code1v.add("___");
						code2v.add(code2[i+versatz]);
						versatz++;
					}
				}

			} catch (Exception e) {
				
			}
		}
		//System.out.println(code1v.size()+" "+code2v.size());

		for (int i = 0; i < code1v.size(); i++) {
			System.out.println(code1v.get(i)+" "+code2v.get(i));
		}

	}

}

Ausgabe:
Code:
___ DWA
___ QDR

vergleich07a1b47egif.gif
 
Zurück
Oben