una separar que por parte manejo funciones extraer espacio declarar caracteres caracter cadenas cadena blanco java diff

que - separar string por caracter java



¿Cómo realizar Diffs de cadena en Java? (7)

Necesito realizar Diffs entre cadenas de Java. Me gustaría poder reconstruir una cadena usando la cadena original y las versiones de diferencias. ¿Alguien ha hecho esto en Java? ¿Qué biblioteca usas?

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


Apache Commons tiene String diff

org.apache.commons.lang.StringUtils

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


Como dice Torsten, puedes usar

org.apache.commons.lang.StringUtils;

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




Si necesita lidiar con las diferencias entre grandes cantidades de datos y comprimir las diferencias de manera eficiente, puede probar una implementación Java de xdelta, que a su vez implementa RFC 3284 (VCDIFF) para diferencias binarias (también debería funcionar con cadenas).


Use la distancia de Levenshtein y extraiga los registros de edición de la matriz que el algoritmo construye. El artículo de Wikipedia vincula a un par de implementaciones, estoy seguro de que hay una implementación Java entre ellas.

Levenshtein es un caso especial del algoritmo de subsecuencia común más larga , es posible que también desee echar un vistazo a eso.


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; } }