Библиотека Diff Utils — это библиотека с открытым исходным кодом для выполнения операций сравнения между текстами: вычисления различий, применения исправлений, создания унифицированных различий или их анализа, создания выходных данных различий для удобного отображения в будущем (например, параллельного просмотра) и так далее.
Основной причиной создания этой библиотеки было отсутствие простых в использовании библиотек со всем необходимым при работе с файлами различий. Первоначально он был вдохновлен библиотекой JRCS и красивым дизайном модуля diff.
Изначально это форк java-diff-utils из Google Code Archive.
Документация Java актуальной версии: JavaDocs java-diff-utils.
Здесь вы найдете больше полезной информации и примеров.
Эти два вывода генерируются с помощью java-diff-utils. Исходный код также можно найти на странице «Примеры» :
Создание одной строки, включающей всю информацию о различиях.
//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 ());
Это тест приговор для диффутилов .
Создание параллельного представления вычисленных различий.
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 () + "|" );
}
оригинальный | новый |
---|---|
Это тест | Это тест для diffutils . |
Это вторая линия. | Это вторая линия. |
Но его легко заменить на любой другой, который лучше подходит для передачи ваших текстов. У меня есть план добавить реализацию некоторых в будущем.
Недавно в процесс сборки был интегрирован процесс проверки стиля. java-diff-utils соответствует соглашению о формате Sun Java. Таблицы TAB не разрешены. Используйте пробелы.
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 <>());
}
Это действительный фрагмент исходного кода:
Просто добавьте приведенный ниже код в зависимости Maven:
< dependency >
< groupId >io.github.java-diff-utils</ groupId >
< artifactId >java-diff-utils</ artifactId >
< version >4.15</ version >
</ dependency >
или используя градиент:
// https://mvnrepository.com/artifact/io.github.java-diff-utils/java-diff-utils
implementation " io.github.java-diff-utils:java-diff-utils:4.12 "