# String.replace mit Umlauten



## User123 (26. Feb 2012)

Weiß jemand warum folgender Code nicht arbeitet?


```
System.out.println("Eingabe");
inputtext = br.readLine();

inputtext = inputtext.replace("ä","ae");
inputtext = inputtext.replace("ö","oe");
inputtext = inputtext.replace("ü","ue");
```

Die Ausgabe entspricht bei diesem Code der Eingabe.

Folgender Code würde übrigens funktionieren:

```
inputtext = inputtext.replace("x","ae");
inputtext = inputtext.replace("y","oe");
inputtext = inputtext.replace("z","ue");
```

Warum könnnen die Umlaute nicht weiterverarbeitet werden?!
Hoffe auf eine schnelle Antwort (auch wenn es nicht eilt)


----------



## Kiri (26. Feb 2012)

also das:


```
public class Test {
    public static void main(String[] args) {
        String inputtext = "ärmel öl über";

        inputtext = inputtext.replace("ä","ae");
        inputtext = inputtext.replace("ö","oe");
        inputtext = inputtext.replace("ü","ue");

        System.out.println(inputtext);
    }
}
```

ergibt bei mir die Ausgabe:


```
aermel oel ueber
```


----------



## Gast2 (26. Feb 2012)

Funktioniert bei mir Problemlos auf der Eclipse Konsole. Wo testest du das? Hast du dir inputtext mal vorher ausgeben lassen, vielleicht steht da ja schon mist drin.


----------



## User123 (26. Feb 2012)

Ich benutze Textpad als Editor (sollte wohl wieder Eclipse benutzen )
Wenn ich nicht Umlaute, sondern normale Buchstaben ersetzen will, funktioniert es auch. Und bei euch funktioniert es auch?! Merkwürdig...

Edit: Code von Kiri funktioniert ebenfalls...

Edit2: Kann das Problem jetzt eingrenzen; wenn ich wie oben den String vorgebe, funktioniert es. Wenn aber der String aus der Tastatur eingelesen wird, geht es nicht.


----------



## Kiri (26. Feb 2012)

Ja, ich kann bestätigen, dass die Tastatureingabe ein Problem ist. Aber ich habe mal ein paar Encodings ausprobiert und bin schließlich fündig geworden. Probieres es mal aus. 


```
import java.io.*;
public class Test {
    public static void main(String[] args) {
        String inputtext = "";
        try{
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(System.in, "ISO-8859-1"));
            System.out.println("Eingabe:");
            inputtext = br.readLine();
            System.out.println("Wiederholung der Eingabe: " + inputtext);
        }catch(Exception e){
            System.out.print("Fehler");
        }
        inputtext = inputtext.replace("ä","ae");
        inputtext = inputtext.replace("ö","oe");
        inputtext = inputtext.replace("ü","ue");

        System.out.println("Ausgabe nach replace:" + inputtext);
    }
}
```


----------



## User123 (27. Feb 2012)

Kiri hat gesagt.:


> ```
> import java.io.*;
> public class Test {
> public static void main(String[] args) {
> ...



Danke, dass du dir die Mühe gemacht hast! Wenn ich deinen Code bei mir benutze, ergibt das bei mir:

Eingabe: äpfel öl überraschung
Wiederholung: ?pfel ?l ?berraschung
Ausgabe nach replace : siehe Wiederholung

Funktioniert also auch nicht. Ich sehe allerdings, dass ja nicht einmal die unveränderte Ausgabe des Strings ordentlich läuft...

Was kann ich als nächstes probieren?


----------



## vanny (27. Feb 2012)

Arbeitest du auf nem Mac?


----------



## Kiri (27. Feb 2012)

versuche mal statt dem Encoding 
	
	
	
	





```
"ISO-8859-1"
```

folgendes Encoding 
	
	
	
	





```
"UTF-8"
```

Das Problem ist, dass die Eingabe nicht korrekt eingelesen wird. Bei mir funktioniert 
	
	
	
	





```
"ISO-8859-1"
```
 aber einwandfrei.


----------



## User123 (27. Feb 2012)

Habe gerade mit ´nem Kumpel zusammen das Problem gelöst!


```
BufferedReader br = new BufferedReader (new InputStreamReader(System.in, "CP850"));
```

Damit kann ich problemlos alle Umlaute verarbeiten!

Danke an alle, die mich dem Ziel näher gebracht haben...

... und nein kein Mac!


----------



## Kiri (27. Feb 2012)

User123 hat gesagt.:


> Habe gerade mit ´nem Kumpel zusammen das Problem gelöst!
> 
> 
> ```
> ...



Bei mir geht deine Variante wiederum nicht Ausgabe wäre:


Eingabe:
ärmel öl über
Wiederholung der Eingabe: õrmel ÷l ³ber
Ausgabe nach replace:õrmel ÷l ³ber


Es muss doch eine Lösung geben die überall funktioniert?!


----------



## User123 (27. Feb 2012)

Das geht dann über meinen Sachverstand hinaus, aber es ist schon komisch.


----------



## Kiri (27. Feb 2012)

Ich habe festgestellt, dass deine Version auf der Konsole funktioniert, dafür nicht über NetBeans. Meine Version wiederum funktioniert bei NetBeans aber nicht auf der Konsole.

Habe es jetzt so geändert, dass es bei beiden bei MIR funktioniert. Warscheinlich liegt es aber auch nur einen meinen Systemeinstellungen.


```
public static void main(String[] args) {
        String inputtext = "";
        
        try{
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(System.in));
            if(System.getProperty("file.encoding").equalsIgnoreCase("cp1252")){
                //für die Konsole
                br = new BufferedReader(
                        new InputStreamReader(System.in, "CP850"));
            }else if(System.getProperty("file.encoding").equalsIgnoreCase("utf-8")){
                //für Netbeans
                br = new BufferedReader(
                        new InputStreamReader(System.in, "ISO-8859-1"));
            }
            
            System.out.println("Eingabe:");
            inputtext = br.readLine();
        }catch(Exception e){
            System.out.print("Fehler");
        }
        inputtext = inputtext.replace("ä","ae");
        inputtext = inputtext.replace("ö","oe");
        inputtext = inputtext.replace("ü","ue");

        System.out.println("Ausgabe nach replace: " + inputtext);
   }
```

Es hat hier doch sicher jemand Erfahrung mit diesem Problem und könnte Typs zum Umgang mit selbigen geben.


----------



## maki (28. Feb 2012)

Das Problem mit dem ihr kämpft heisst: Encoding

Jede Plattform hat ihr eigenes, oft sogar abhängig vond er Kommandozeile, Linux nutzt utf-8, Windows je nach Sprache ein etwas andres, etc. pp.

Das Encoding kann man auch für den Quelltext selber einstellen, Eclipse nutzt zB. unter jeder Plattform das standard Encoding wenn keines explizit eingestellt ist.

Wenn ihr also Probleme habt mit Sonderzeichen, lohnt es sich imemr darauf zu achten, ansonsten auch


----------



## Kiri (28. Feb 2012)

Das Problem habe ich wohl erkannt, aber dennoch verwirrt es mich. Soll man nun einige Fälle abfragen und das Encoding dementsprechend angegeben oder tritt dieses Problem nur auf, wenn etwas über die Konsole (auch NetBeans, Eclipse, etc.) eingegeben wird? Mir ist dieses Problem nämlich noch nie in einer Gui-Anwendung aufgefallen.

Also, eigentlich geht es mir darum sicher zu gehen, dass wenn man eine GUI-Anwendung weitergibt, dort auch alle Zeichen korrekt angezeigt werden.


----------



## maki (28. Feb 2012)

Es gibt imho nur einen Ausweg: 
Ein Encoding festlegen, ich bevorzuge utf-8.
das nutzt nur leider nix bei Konsolenanwendungen, da cmd.exe kein utf-8 unterstützt.

Das Encoding "Problem" gibt es übrigens eben auch beim Quellcode, und bei externen Ressourcen (dateien, wie zB. Properties, Text, usw, Datenbanken, etc. pp.)


----------

