2008年1月5日土曜日

[JAVA>Diff]Sample program how to use Java's diff Library(JRCS Library)

Sample program how to use Java's diff Library and output difference between 2 arrays.
(There are some diff libraries written in Java, but in this case, I use JRCS diff library.)

Java Diff Library References
  • JRCS Home
    http://www.suigeneris.org/kb/display/jrcs/JRCS+Home
  • Other Diff Libraries written in Java
    http://www.incava.org/projects/java/
  • Diff Libraries written in JavaScript
    http://ejohn.org/projects/javascript-diff-algorithm/
  • Other References
    • http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/free?page=JRCS
    • Wikipedia Diff
      http://ja.wikipedia.org/wiki/Diff
Installations
  1. Download the latest JRCS Library jar file.
    http://www.suigeneris.org/kb/display/jrcs/JRCS+Home#JRCSHome-Downlodables
  2. Unzip the latest zip file
  3. get org.suigeneris.jrcs.diff-(version number).jar file from unzipped files.

Sample Program
  • Import classes
    import org.suigeneris.jrcs.diff.simple.SimpleDiff;
    import org.suigeneris.jrcs.diff.DiffAlgorithm;
    import org.suigeneris.jrcs.diff.Diff;
    import org.suigeneris.jrcs.diff.Revision;
    import org.suigeneris.jrcs.diff.delta.Delta;
    import org.suigeneris.jrcs.diff.delta.Chunk;
    import org.suigeneris.jrcs.diff.DifferentiationFailedException;
    import org.suigeneris.jrcs.util.ToString;
  • Program
    public void DiffTest(){
    try{
    //Initializing diff algorithm, in this sample, use SimpleDiff Algorithm
    DiffAlgorithm algorithm=new SimpleDiff();

    //Create 2 arrays to output sample difference
    String[] origs=new String[]{"one","two","three","four","five"};
    String[] revised=new String[]{"two","four"};

    //Create new Diff Object
    //first argument is original array, second argument is algorithm object.
    Diff difference=new Diff(origs,algorithm);
    //Call diff() method for Diff Object with new array you want to get difference between original
    Revision rev=difference.diff(revised);

    //Output difference between original and revised arrays to use Revision's toString()
    System.out.println(rev.toString());
    /*
    Sample output of revision's toString()
    1d0
    < one
    3d1
    < three
    5d2
    < five
    */

    System.out.println(rev.toRCSString());
    /*
    Sample Output of revision's toRCSString()
    d1 1
    d3 1
    d5 1
    */

    //get all positions and information existing the difference
    System.out.println("**********Diff Delta**********");
    for(int i=0;i<rev.size();i++){
    Delta delta=rev.getDelta(i);
    Chunk origChunk=delta.getOriginal();
    Chunk revisedChunk=delta.getRevised();
    System.out.println("delta="+delta.toString());
    System.out.println("orig range ="+origChunk.rangeString());
    System.out.println("revised range="+revisedChunk.rangeString());
    }
    /*
    Sample Output of delta
    **********Diff Delta**********
    delta=1d0
    < one

    orig range =0
    revised range=0

    delta=3d1
    < three

    orig range =2
    revised range=1

    delta=5d2
    < five

    orig range =4
    revised range=2
    */
    }catch(DifferentiationFailedException eDifferentiationFailed){
    //sometimes throw Exception in Diff.diff() method
    System.out.println("Exception occured, pos:1, e="+eDifferentiationFailed);
    }
    }

0 件のコメント: