You are not logged in.

  • Login

1

Thursday, December 8th 2005, 8:23pm

JAVA Runlength

Java Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/**
 * 
 * @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();
	}
}

Social bookmarks