Java'da iki string arasındaki oluşan farkları karşılaştırmak için java-diff-utils kütüphanesi kullanılabilir.
Aşağıdaki bağımlılığı ekleyelim:
<dependency>
<groupId>io.github.java-diff-utils</groupId>
<artifactId>java-diff-utils</artifactId>
<version>4.0</version>
</dependency>
Aşağıdaki örnekte iki string karşılaştırılmaktadır :
import com.github.difflib.algorithm.DiffException;
import com.github.difflib.text.DiffRow;
import com.github.difflib.text.DiffRowGenerator;
public class Test {
public static void main(String[] args) throws DiffException {
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();
String text1="a Example is sucessfull\r\n" +
"this is true\r\n" +
"but if else";
String text2="an Example is successfull\r\n" +
"this is false\r\n" +
"but if else if";
List<DiffRow> rows = generator.generateDiffRows(Arrays.asList(text1), Arrays.asList(text2));
for (DiffRow diffRow : rows) {
System.out.println(diffRow.getOldLine());
}
}
}
Bu uygulama çalıştırıldığında aşağıdaki gibi çıktı üretir :
~a~**an** Example is ~sucessfull~**successfull**
this is ~true~**false**
but if else** if**
İlk satırda a ifadesi silinip an yapılmış, sucessfull ifadesi düzeltilip successfull yapılmış. İkinci satırda true yerine false yapılmış. Üçüncü satırda ise fazladan bir if eklenmiş. Görüldüğü gibi hepsi tespit edilmiştir.
Eğer eski ve yenisini aynı anda görmek istiyorsanız aşağıdaki gibi yapabilirsiniz :
import java.util.Arrays;
import java.util.List;
import com.github.difflib.algorithm.DiffException;
import com.github.difflib.text.DiffRow;
import com.github.difflib.text.DiffRowGenerator;
public class TestDelta3 {
public static void main(String[] args) throws DiffException {
DiffRowGenerator generator = DiffRowGenerator.create()
.showInlineDiffs(true)
.inlineDiffByWord(true)
.oldTag(f -> "~")
.newTag(f -> "**")
.build();
String text1="a Example is sucessfull\r\n" +
"this is true\r\n" +
"but if else";
String text2="an Example is successfull\r\n" +
"this is false\r\n" +
"but if else if";
List<DiffRow> rows = generator.generateDiffRows(Arrays.asList(text1), Arrays.asList(text2));
for (DiffRow row : rows) {
System.out.println(row.getOldLine() + "--->" + row.getNewLine());
System.out.println();
}
}
}
Bu uygulama çalıştırıldığında aşağıdaki gibi bir çıktı üretecektir :
~a~ Example is ~sucessfull~
--->**an** Example is **successfull**
this is ~true~
--->this is **false**
but if else--->but if else** if**
Görüldüğü gibi eski satırda silinenler ~ ile gösterilirken, yeni kayıtta ** şeklinde gösterilir.