| ErsetzenRekursivV2.java |
1 /**
2 * 183.592 Programmierpraxis TU Wien WS2014/15 H.Moritsch
3 * Zeichenersetzung, rekursiv
4 * mit Ausgabe des Aufrufs
5 */
6 public class ErsetzenRekursivV2 {
7 public static void main(String[] args) {
8
9 String string = "aaabbcccccddd";
10
11 // aus dem String mit 'toCharArray' ein neues Zeichenarray erzeugen
12 char[] zarray = string.toCharArray();
13
14 System.out.println("7:"+zarray[7]);
15
16 // Ersetzung durchführen
17 ersetze ( zarray , 7, 'X' );
18 System.out.println();
19
20 // aus dem Zeichenarray mit 'valueOf' einen neuen String erzeugen und ausgeben
21 System.out.println(String.valueOf(zarray)); // Ergebnis: aaabbXXXXXddd
22
23 }
24
25 /**
26 * Ersetzung des Zeichen an der Position 'pos' durch 'zeichen', sowie
27 * der Zeichen davor und danach - bis ein anderes Zeichen angetroffen wird
28 */
29 private static void ersetze ( char[] zeichenfolge, int pos, char zeichen ) {
30
31 char z = zeichenfolge[pos]; // das Zeichen an der Position 'pos'
32
33 System.out.println();
34 System.out.println("ersetze( " + elements(zeichenfolge) + ", "
35 + pos + ", " + zeichen + " );");
36
37 // das Zeichen an der Position 'pos' ersetzen
38 zeichenfolge[pos] = zeichen;
39
40 System.out.println(" "+ elements(zeichenfolge));
41
42 System.out.println(" links " + (pos-1) + ":" + zeichenfolge[pos-1]);
43 // wenn es links davon noch ein Zeichen gibt und es mit z identisch ist:
44
45 if (pos > 0 && zeichenfolge[pos-1] == z)
46 ersetze ( zeichenfolge, pos-1, zeichen );
47
48 System.out.println(" rechts " + (pos+1) + ":" + zeichenfolge[pos+1]);
49 // wenn es rechts davon noch ein Zeichen gibt und es mit z identisch ist:
50
51 if (pos < zeichenfolge.length-1 && zeichenfolge[pos+1] == z)
52 ersetze ( zeichenfolge, pos+1, zeichen );
53 }
54
55 /**
56 * Liefert alle Elemente eines Zeichenarrays mit Indizes
57 */
58 private static String elements( char[] ca ) {
59 String r = "|";
60 for (int i = 0; i < ca.length; i++)
61 r = r + i + ":" + ca[i] + "|";
62 return r;
63 }
64
65 }
66