Quellcode
- /**
- *
- * @author Torben Brodt
- * @version 1.0
- *
- * <p />Run Length Encoding
- * <p />Funktioniert mit Java < 1.5
- */
- public class A08_Runlength {
- /**
- * @param args
- */
- public static void main(String[] args) {
- String eingabe = "AAAABBECCCCCDDDDDD";
- String conv = runlengthEncode(eingabe);
- System.out.println("Plain:\t" + eingabe);
- System.out.println("Short:\t" + conv);
- System.out.println("Short:\t" + runlengthDecode(conv));
- }
- /**
- * Wandelt String in Runlength um
- * @param eingabe -> der komplette String
- * @return -> der gekürzte String
- */
- static String runlengthEncode(String eingabe)
- {
- eingabe += "$";
- int zaehler = 1, i=0;
- while(eingabe.charAt(i) != '$') {
- if(eingabe.charAt(i) != eingabe.charAt(i+1)) {
- if(zaehler > 1) {
- String anfang = eingabe.substring(0, i-zaehler+2) + zaehler;
- String ende = eingabe.substring(i+1);
- eingabe = anfang+ende;
- i=0;
- }
- zaehler=1;
- } else {
- zaehler++;
- }
- i++;
- }
- return eingabe.substring(0, eingabe.length()-1);
- }
- /**
- * Wandelt Runlength in String um
- * @param eingabe
- * @return
- */
- static String runlengthDecode(String eingabe) {
- StringBuffer ausgabe = new StringBuffer();
- int i=0;
- eingabe += "-$";
- String zahl = "";
- char repeat = '\0';
- do {
- char s = eingabe.charAt(i);
- if(Character.isDigit(s)) {
- if(repeat == '\0')
- repeat = eingabe.charAt(i-1);
- zahl += s;
- } else {
- if(zahl.length() > 0) {
- for(int j=0; j<Integer.parseInt(zahl)-1; j++)
- ausgabe.append(repeat);
- zahl = "";
- repeat = '\0';
- }
- if(eingabe.charAt(i+1) != '$')
- ausgabe.append(s);
- }
- i++;
- } while(eingabe.charAt(i) != '$');
- return ausgabe.toString();
- }
- }