Umlaute ersetzen ohne replace()

David2456

Aktives Mitglied
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

Top Contributor
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

Top Contributor
Ich würde die erste Methode bevorzugen, wobei du dabei am besten einen StringBuilder nutzt, anstatt immer wieder neue Strings zu erzeugen
Java:
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

Aktives Mitglied
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.

Java:
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

Administrator
Mitarbeiter
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

Aktives Mitglied
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?
 

VfL_Freak

Top Contributor
Moin,
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 ?? :confused:

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
 

Neue Themen


Oben