La biblioteca Diff Utils es una biblioteca OpenSource para realizar operaciones de comparación entre textos: calcular diferencias, aplicar parches, generar diferencias unificadas o analizarlas, generar resultados de diferencias para una fácil visualización futura (como una vista de lado a lado), etc.
La razón principal para crear esta biblioteca fue la falta de bibliotecas fáciles de usar con todo el material habitual que necesita al trabajar con archivos diff. Originalmente se inspiró en la biblioteca JRCS y su bonito diseño del módulo diferencial.
Esta es originalmente una bifurcación de java-diff-utils de Google Code Archive.
Javadocs de la versión de lanzamiento real: JavaDocs java-diff-utils
Mire aquí para encontrar más información y ejemplos útiles.
Estas dos salidas se generan utilizando este java-diff-utils. El código fuente también se puede encontrar en la página de Ejemplos :
Producir una sola línea que incluya toda la información diferencial.
//create a configured DiffRowGenerator
DiffRowGenerator generator = DiffRowGenerator . create ()
. showInlineDiffs ( true )
. mergeOriginalRevised ( true )
. inlineDiffByWord ( true )
. oldTag ( f -> "~" ) //introduce markdown style for strikethrough
. newTag ( f -> "**" ) //introduce markdown style for bold
. build ();
//compute the differences for two test texts.
List < DiffRow > rows = generator . generateDiffRows (
Arrays . asList ( "This is a test senctence." ),
Arrays . asList ( "This is a test for diffutils." ));
System . out . println ( rows . get ( 0 ). getOldLine ());
Esta es una prueba frase para difutils .
Producir una vista lado a lado de las diferencias calculadas.
DiffRowGenerator generator = DiffRowGenerator . create ()
. showInlineDiffs ( true )
. inlineDiffByWord ( true )
. oldTag ( f -> "~" )
. newTag ( f -> "**" )
. build ();
List < DiffRow > rows = generator . generateDiffRows (
Arrays . asList ( "This is a test senctence." , "This is the second line." , "And here is the finish." ),
Arrays . asList ( "This is a test for diffutils." , "This is the second line." ));
System . out . println ( "|original|new|" );
System . out . println ( "|--------|---|" );
for ( DiffRow row : rows ) {
System . out . println ( "|" + row . getOldLine () + "|" + row . getNewLine () + "|" );
}
original | nuevo |
---|---|
Esta es una prueba | Esta es una prueba para difutils . |
Esta es la segunda línea. | Esta es la segunda línea. |
Pero puede sustituirse fácilmente por cualquier otro que sea mejor para entregar tus textos. Tengo planeado agregar la implementación de algunos en el futuro.
Recientemente se integró un proceso de estilo de verificación en el proceso de construcción. java-diff-utils sigue la convención de formato Sun Java. No se permiten TAB. Usa espacios.
public static < T > Patch < T > diff ( List < T > original , List < T > revised ,
BiPredicate < T , T > equalizer ) throws DiffException {
if ( equalizer != null ) {
return DiffUtils . diff ( original , revised ,
new MyersDiff <>( equalizer ));
}
return DiffUtils . diff ( original , revised , new MyersDiff <>());
}
Esta es una pieza válida de código fuente:
Simplemente agregue el siguiente código a sus dependencias de Maven:
< dependency >
< groupId >io.github.java-diff-utils</ groupId >
< artifactId >java-diff-utils</ artifactId >
< version >4.15</ version >
</ dependency >
o usando gradle:
// https://mvnrepository.com/artifact/io.github.java-diff-utils/java-diff-utils
implementation " io.github.java-diff-utils:java-diff-utils:4.12 "