String.replace mit Umlauten

User123

Mitglied
Weiß jemand warum folgender Code nicht arbeitet?

Java:
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:
Java:
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) 😀
 
also das:

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

Code:
aermel oel ueber
 
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.
 
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.
 
Zuletzt bearbeitet:
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.

Java:
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);
    }
}
 
Java:
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);
    }
}

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?
 
versuche mal statt dem Encoding
Code:
"ISO-8859-1"

folgendes Encoding
Code:
"UTF-8"

Das Problem ist, dass die Eingabe nicht korrekt eingelesen wird. Bei mir funktioniert
Code:
"ISO-8859-1"
aber einwandfrei.
 
Habe gerade mit ´nem Kumpel zusammen das Problem gelöst!

Java:
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! 😀
 
Habe gerade mit ´nem Kumpel zusammen das Problem gelöst!

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

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?!
 
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.

Java:
    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.
 
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 😉
 
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.
 
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.)
 

Zurück
Oben