A biblioteca Diff Utils é uma biblioteca OpenSource para realizar operações de comparação entre textos: calcular diferenças, aplicar patches, gerar diferenças unificadas ou analisá-las, gerar saída de comparação para fácil exibição futura (como visualização lado a lado) e assim por diante.
O principal motivo para construir esta biblioteca foi a falta de bibliotecas fáceis de usar com todas as coisas usuais que você precisa ao trabalhar com arquivos diff. Originalmente foi inspirado na biblioteca JRCS e tem um belo design do módulo diff.
Este é originalmente um fork do java-diff-utils do Google Code Archive.
Javadocs da versão de lançamento real: JavaDocs java-diff-utils
Veja aqui para encontrar mais informações e exemplos úteis.
Essas duas saídas são geradas usando este java-diff-utils. O código fonte também pode ser encontrado na página Exemplos :
Produzindo um forro incluindo todas as informações de diferença.
//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 ());
Este é um teste sentença para difutils .
Produzindo uma visão lado a lado das diferenças computadas.
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 | novo |
---|---|
Este é um teste | Este é um teste para difutils . |
Esta é a segunda linha. | Esta é a segunda linha. |
Mas pode ser facilmente substituído por qualquer outro que seja melhor para entregar seus textos. Tenho planos de adicionar a implementação de alguns no futuro.
Recentemente, um processo checkstyle foi integrado ao processo de construção. java-diff-utils segue a convenção de formato sun java. Não são permitidos TABs. Use espaços.
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 <>());
}
Este é um trecho válido do código-fonte:
Basta adicionar o código abaixo às suas dependências do maven:
< dependency >
< groupId >io.github.java-diff-utils</ groupId >
< artifactId >java-diff-utils</ artifactId >
< version >4.15</ version >
</ dependency >
ou 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 "