# Umlaute ersetzen ohne replace()



## David2456 (7. Dez 2015)

Hallo,
ich bräuchte Hilfe bei folgender Aufgabe. Ich soll einen String einlesen und alle ä ü ö ß zu ae ue oe und ss ersetzen, aber ich darf nicht die replace() replaceAll() oder replaceFirst() benutzen. Jetzt habe ich es mit contains probiert, aber ohne erfolg. Dann dachte ich mir noch das ich ja den String auf ö ä ü ß untersuchen könnte und diese dann ersetzen kann, dann habe ich aber das Problem das falls ich ä ü ö ß finde es ersetzen will. Funktioniert das überhaupt? Dachte mir dann kommt nur sowas wie z.B. bei der Eingabe Häuser   Häuserae , und nicht Haeuser raus. Also ich bin ein bisschen Planlos.
Vielen Dank schonmal


----------



## Joose (7. Dez 2015)

Möglichkeit 1:
Gehe deinen String Buchstaben für Buchstaben durch und füge in die Buchstaben der Reihe nach zu einem anderen String hinzu.
Solltest du einen der Umlaute erkennen, fügst du stattdessen eben ae/ue/oe/ss hinzu.

Möglichkeit 2:
Mittels contains und indexOf (Methoden der Klasse String) das nächste Vorkommen eines Strings suchen und dann mittels Substring den Teil vor und den Teil nach dem Umlaut "herausschneiden" und wieder neu zusammenfügen inkl den aufgelösten Umlaut.


----------



## InfectedBytes (7. Dez 2015)

Ich würde die erste Methode bevorzugen, wobei du dabei am besten einen StringBuilder nutzt, anstatt immer wieder neue Strings zu erzeugen

```
StringBuilder sb = new StringBuilder();
for(int i=0;i<text.length(); i++) {
  char c = text.charAt(i);
  // falls z.b. ä: sb.append("ae")
  // falls kein umlaut sb.append(c); // also einfach den char hinzufügen
}
text = sb.toString(); // string zusammenbauen
```


----------



## David2456 (8. Dez 2015)

Dankeschön, aber könntest du die Kommentarzeilen erläutern? Ich kriege diese nicht implementiert


----------



## InfectedBytes (8. Dez 2015)

```
if(c=='ä') sb.append("ae");
else if( ....) ....
else sb.append(c);
```


----------



## David2456 (8. Dez 2015)

Mal abgesehen davon das die Chars ä ö ü ß nicht erkannt werden (hab sie zum testen einfach mal durch a o u s ersetzt), wieso funktioniert eine Methode nicht? Hab sie eigentlich genauso geschrieben wie sonst auch.


```
public class StringManipulation {

      
        public static void main(String[] args) {
       
        String s = In.readString();
        Out.println(s);
        replaceUmlauts(s);
       
        }
       
        public static void replaceUmlauts(string s){
           
            StringBuilder sb = new StringBuilder();
            for(int i=0;i<s.length(); i++) {
                char c = s.charAt(i);
               
                if(c=='ä'){ sb.append("ae");
                }else if(c=='ö'){  sb.append("oe");
                    }else if(c=='ü'){  sb.append("ue");
                        }else if(c=='ß'){  sb.append("ss");
                }else sb.append(c);
            }
            s = sb.toString();
         
        }
       
    }
```


----------



## Flown (8. Dez 2015)

Java bietet bei Methodenparameter nur call-by-value. Da String aber ein Objekt ist, könnte man es aber theroetisch verändern. ABER: Strings sind immutable, darum geht das nicht und du hast jetzt zwei Möglichkeiten:
1. neuen String zurückgeben
2. String in char-Array verwandeln -> Methode auf Array anwenden -> Array wieder in einen String verwandeln.


----------



## David2456 (8. Dez 2015)

ok, heißt jetzt (möchte 1. anwenden) das erstmal void weg und return mit neuem string oder?

edit: Nur mal so nebenbei. Wieso werden die chars ä ü ö und ß nicht erkannt?


----------



## Flown (8. Dez 2015)

Hast du es schon ausprobiert?


----------



## VfL_Freak (9. Dez 2015)

Moin,


David2456 hat gesagt.:


> ok, heißt jetzt (möchte 1. anwenden) das erstmal void weg und return mit neuem string oder?


Kannst Du mal erklären, was Du mit diesen Satzgebilde sagen möchstest ?? 

Der Rückgabetyp "void" besagt einfach, dass die Methode KEINEN Wert zurückgibt, während der Typ "String" besagen würde, das ein String zurückgegeben werden muss.
(War das de Frage??)

Gruß Klaus


----------

