كيفية تنفيذ سلسلة بيانات الاختلاف في جافا ؟

StackOverflow https://stackoverflow.com/questions/132478

  •  02-07-2019
  •  | 
  •  

سؤال

أنا بحاجة إلى إجراء ديفس بين جافا السلاسل.وأود أن تكون قادرة على إعادة بناء سلسلة باستخدام السلسلة الأصلية و مهرجان دبي السينمائي الدولي الإصدارات.وقد أي شخص فعل هذا في جافا ؟ ماذا المكتبة التي تستخدمها ؟

String a1; // This can be a long text
String a2; // ej. above text with spelling corrections
String a3; // ej. above text with spelling corrections and an additional sentence

Diff diff = new Diff();
String differences_a1_a2 = Diff.getDifferences(a,changed_a);
String differences_a2_a3 = Diff.getDifferences(a,changed_a);    
String[] diffs = new String[]{a,differences_a1_a2,differences_a2_a3};
String new_a3 = Diff.build(diffs);
a3.equals(new_a3); // this is true
هل كانت مفيدة؟

المحلول

هذه المكتبة يبدو أن تفعل خدعة: جوجل-مهرجان دبي السينمائي الدولي المباراة التصحيح.فإنه يمكن إنشاء التصحيح سلسلة من الخلافات يسمح تطبيق التصحيح.

تحرير:حل آخر قد يكون https://code.google.com/p/java-diff-utils/

نصائح أخرى

أباتشي العموم لديها سلسلة مهرجان دبي السينمائي الدولي

org.أباتشي.المشاع.لانغ.StringUtils

StringUtils.difference("foobar", "foo");

كما يقول تورستن يمكنك استخدام

org.أباتشي.المشاع.لانغ.StringUtils;

System.err.println(StringUtils.getLevenshteinDistance("foobar", "bar"));

على جافا مهرجان دبي السينمائي الدولي utills المكتبة قد تكون مفيدة.

إذا كنت بحاجة إلى التعامل مع الخلافات بين كميات كبيرة من البيانات و الاختلافات بكفاءة مضغوط, يمكنك أن تحاول جافا تنفيذ xdelta ، والتي بدورها تنفذ RFC 3284 (VCDIFF) الثنائية ديفس (يجب أن تعمل مع سلاسل أيضا).

استخدام Levenshtein المسافة واستخراج تحرير السجلات من مصفوفة الخوارزمية يتراكم.مقالة ويكيبيديا روابط بضعة تطبيقات, أنا متأكد من أن هناك تنفيذ جافا بين في.

Levenshtein هو حالة خاصة من أطول Subsequence المشترك الخوارزمية ، قد ترغب أيضا في إلقاء نظرة على ذلك.

public class Stringdiff {
public static void main(String args[]){
System.out.println(strcheck("sum","sumsum"));
}
public static String strcheck(String str1,String str2){
    if(Math.abs((str1.length()-str2.length()))==-1){
        return "Invalid";
    }
    int num=diffcheck1(str1, str2);
    if(num==-1){
        return "Empty";
    }
    if(str1.length()>str2.length()){
        return str1.substring(num);
    }
    else{
        return str2.substring(num);
    }

}

public static int diffcheck1(String str1,String str2)
{
    int i;
    String str;
    String strn;
    if(str1.length()>str2.length()){
        str=str1;
        strn=str2;
    }
    else{
        str=str2;
        strn=str1;
    }
    for(i=0;i<str.length() && i<strn.length();i++){
            if(str1.charAt(i)!=str2.charAt(i)){
                return i;
            }
    }
        if(i<str1.length()||i<str2.length()){
            return i;
        }

    return -1;

   }
   }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top