57 votes

Comment effectuer des différences de chaîne en Java?

J'aurais besoin d'effectuer des différences entre des chaînes Java. Je voudrais pouvoir reconstruire une chaîne à partir de la chaîne d'origine et des versions diff. Quelqu'un l'a-t-il fait en Java? Quelle bibliothèque utilisez-vous?

 String a1; // This can be a long text
String a2; // ej. above text with spelling corrections
String a3; // ej. above text with spelling corrections and an additional sentence

Diff diff = new Diff();
String differences_a1_a2 = Diff.getDifferences(a,changed_a);
String differences_a2_a3 = Diff.getDifferences(a,changed_a);    
String[] diffs = new String[]{a,differences_a1_a2,differences_a2_a3};
String new_a3 = Diff.build(diffs);
a3.equals(new_a3); // this is true
 

54voto

bernardn Points 897

Cette bibliothèque semble faire l'affaire: google-diff-match-patch . Il peut créer une chaîne de patch à partir des différences et permettre de réappliquer le patch.

modifier : la bibliothèque semble être déplacée vers https://code.google.com/p/java-diff-utils/

26voto

Paul Whelan Points 8620

Apache Commons a diff chaîne

org.apache.commons.lang.StringUtils

 StringUtils.difference("foobar", "foo");
 

4voto

iobit Points 61

La bibliothèque java diff utills peut également être utile.

3voto

Paul Whelan Points 8620

Comme le dit Torsten, vous pouvez utiliser

org.apache.commons.lang.StringUtils;

 System.err.println(StringUtils.getLevenshteinDistance("foobar", "bar"));
 

0voto

Torsten Marek Points 27554

L'utilisation de la distance de Levenshtein et de l'extrait de l'édition des journaux à partir de la matrice de l'algorithme se construit. L'article de Wikipédia liens d'un couple d'implémentations, je suis sûr qu'il y a une implémentation de Java entre dans.

Levenshtein est un cas particulier de la plus Longue sous-suite Commune algorithme, vous pouvez également avoir un aperçu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X