Veri

java-diff-utils API'si ile String Karşılaştırma

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.
zafer.teker , 22.03.2020

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir