ไลบรารี Diff Utils เป็นไลบรารี OpenSource สำหรับดำเนินการเปรียบเทียบระหว่างข้อความ: การคำนวณความแตกต่าง การใช้แพตช์ การสร้างความแตกต่างแบบรวมหรือการแยกวิเคราะห์ การสร้างเอาต์พุตที่แตกต่างกันสำหรับการแสดงในอนาคตที่ง่ายดาย (เช่น มุมมองแบบเคียงข้างกัน) และอื่นๆ
เหตุผลหลักในการสร้างไลบรารีนี้คือการขาดไลบรารีที่ใช้งานง่ายซึ่งมีทุกสิ่งตามปกติที่คุณต้องการในขณะที่ทำงานกับไฟล์ diff เดิมทีได้รับแรงบันดาลใจจากห้องสมุด JRCS และเป็นการออกแบบโมดูล diff ที่ดี
เดิมทีนี่เป็นทางแยกของ java-diff-utils จาก Google Code Archive
Javadocs ของเวอร์ชันวางจำหน่ายจริง: 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 () + "|" );
}
ต้นฉบับ | ใหม่ |
---|---|
นี่คือการทดสอบ | นี่คือการทดสอบ การแพร่กระจาย |
นี่คือบรรทัดที่สอง | นี่คือบรรทัดที่สอง |
แต่มันสามารถแทนที่ได้อย่างง่ายดายด้วยสิ่งอื่นที่ดีกว่าสำหรับการส่งข้อความของคุณ ฉันมีแผนจะเพิ่มการดำเนินการบางอย่างในอนาคต
ล่าสุด กระบวนการตรวจสอบสไตล์ถูกรวมเข้ากับกระบวนการสร้าง 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 >
หรือใช้ gradle:
// https://mvnrepository.com/artifact/io.github.java-diff-utils/java-diff-utils
implementation " io.github.java-diff-utils:java-diff-utils:4.12 "