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