1   /**
2    * 183.592 Programmierpraxis TU Wien WS2014/15 H.Moritsch
3    * Zeichenersetzung, rekursiv
4    */
5   public class ErsetzenRekursiv {
6       public static void main(String[] args) {
7   
8           String string = "aaabbcccccddd";
9   
10          // aus dem String mit 'toCharArray' ein neues Zeichenarray erzeugen
11          char[] zarray = string.toCharArray();
12  
13          // Ersetzung durchführen
14          ersetze ( zarray , 7, 'X' );        
15  
16          // aus dem Zeichenarray mit 'valueOf' einen neuen String erzeugen und ausgeben        
17          System.out.println(String.valueOf(zarray)); // Ergebnis: aaabbXXXXXddd
18  
19      }
20  
21      /**
22      * Ersetzung des Zeichen an der Position 'pos' durch 'zeichen', sowie
23      * der Zeichen davor und danach - bis ein anderes Zeichen angetroffen wird
24      */
25      private static void ersetze ( char[] zeichenfolge, int pos, char zeichen ) {
26  
27          char z = zeichenfolge[pos]; // das Zeichen an der Position 'pos'
28  
29          // das Zeichen an der Position 'pos' ersetzen
30          zeichenfolge[pos] = zeichen;
31  
32          // wenn es links davon noch ein Zeichen gibt und es mit z identisch ist:
33          if (pos > 0 && zeichenfolge[pos-1] == z) 
34              // dieses ebenfalls ersetzen: rekursiver Aufruf
35              ersetze ( zeichenfolge, pos-1, zeichen );
36  
37          // wenn es rechts davon ein Zeichen gibt und es mit z identisch ist:
38          if (pos < zeichenfolge.length-1 && zeichenfolge[pos+1] == z) 
39              // dieses ebenfalls ersetzen: rekursiver Aufruf
40              ersetze ( zeichenfolge, pos+1, zeichen );
41      }
42  
43  }
44