Hallo Martin,
vielen Dank für die Antwort.
Hallo!
Zwei Anmerkungen zu Deinem Code:
- ‚&‘ ist das binäre Und, in Deinem while bräuchtest Du
eigentlich && für das logische Und
- Die Schleife fällt auf die Nase, wenn str2 kürzer als str1
ist.
Guter Hinweis mit &&/& und ||/| steh ich eh auf dem Kriegfuss!
Da die Anzahl der Zeichen schon vorab geprüft wird, hat’s noch keinen Fehler gegeben.
Du könntest Dir natürlich auch einen Präfixbaum aufbauen, aber
das wird auf jedem Fall aufwändiger als die jetzige
ad-hoc-Präfixbestimmung und rentiert sich damit nur in
bestimmten Fällen.
Da alle Texte „immer ganz anders“ sind, macht da wohl keinen Sinn. Im Moment hab ich so 3000 Zeilen mit je zwei Texten. Der Vergleich erfolgt immer innerhalb einer Zeile. Aber selbst bei 30 Treffern, die ich so analysieren will, dauert das schon „sichtbar“. Also ca. 35 sec für aktuell 450 Zeilen.
Wenn Du noch mehr zum Unterschied wissen willst als nur das
gemeinsame Präfix und die strings nicht zu lang sind, würde
ich Dir empfehlen, Dir mal die Levenshtein-Distanz zu Gemüte
zu führen. Das ist ein Algorithmus, mit dem man feststellen
kann, in wie vielen Schritten (Einfügen/Löschen einzelner
Zeichen) String1 in String2 überführt werden kann.
Es geht sich darum aufzuzeigen, dass Texte unterschiedlich sind. Da die Texte eigentlich XML sind prüfe ich vorab andere Kriterien (wie die Anzahl der Knoten). Ich benutze erst den String-Vergleich, wenn diese Methoden keinen Unterschied gezeigt haben. Wie „groß“ dieser ist, ist dann eigentlich egal.
Ich werd das dann mal erstmal so lassen. Ich hatte halt gehoft, dass es sowas wie or(str1, str2) gibt. Ein logischer Vergleich je Char würde ja false liefern, wenn das Char unterschiedlich ist.
mfg
Dirk.Pegasus