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