Umlaute mit Switch-Case tauschen

Status
Nicht offen für weitere Antworten.

rgrenzh

Mitglied
Hallo,
ich möchte nach Eingabe zB. eines Namens den String auf umlaute überprüfen und ggf. tausch

ä = ae usw.

Ich habe das bisher mittels Switch-Case probiert. Das funktioniert aber nicht.

Code:
public class umlaute {

    public static void main(String[] args){

        char[] umlaute =  {'ä', 'ö', 'ü', 'ß'};
         
        
        switch(umlaute){
            case umlaute[0]: System.out.println('ae'); break;
            default;
        }

wie kann ich diese Funktion realisieren? Bitte um kleinen Tip.
 

Noctarius

Top Contributor
switch / case kann vor Java 7 nicht mit Strings / Chars umgehen. Am besten realisierst du das mit einer For-Schleife über dein Array von Chars.
 
M

maki

Gast
chars sind eigentlich ints, das sollte nicht das Problem sein.

Ist wohl eher eine Sache des Zeichensatzes.
Woher nimmst du die Eingaben für das Programm?
 

rgrenzh

Mitglied
Aus einer Eingabe. Das Programm, soll wenn es mal fertig ist aus Vor- und Zunamen ein Username erzeugen. 1er Buchstabe Vorname und die ersten 3 Buchstaben vom Nachnamen. Voher soll die Eingabe auf Umlaute geprüft werden.

Code:
package tests;

import java.io.*;

public class umlaute {

    public static void main(String[] args)throws IOException{

       char[] umlaute =  {'ä', 'ö', 'ü', 'ß'};
       String eingabe;

       BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
       eingabe = input.readLine();
        
        
        switch(umlaute){
            case umlaute[0]: System.out.println('ae'); break;
            default;
        }

    }
}
 

hdi

Top Contributor
chars sind nur eine andere Darstellung von int, du kannst ja auch sagen:

Java:
char c = 97; // 'a'

Insofern geht natürlich auch ein switch. Aber dem TO würde ich das nicht über ein switch-Konstrukt empfehlen. Er will ja nur Zeichen in einem String austauschen. Dafür gibt es

Java:
string.replace("ä","ae");
 

rgrenzh

Mitglied
Habe es jetzt mal so probiert. Klappt jedoch auch nicht... Kann ja eigentlich nicht so schwer sein... ich noob :)

Code:
package tests;

import java.io.*;

public class umlaute {

    public static void main(String[] args)throws IOException{

    String eingabe;
     
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Bitte geben Sie Ihren Vorname ein: ");
        eingabe = input.readLine();
       
        try{
           
               if (eingabe.contains("ä")){
                    eingabe.replace("ä", "ae");
                   }

               if (eingabe.contains("ö")){
                    eingabe.replace("ö", "oe");
                   }

               if (eingabe.contains("ü")){
                    eingabe.replace("ü", "ue");
                   }

               if (eingabe.contains("ß")){
                    eingabe.replace("ß", "ss");
                   }
       
           }catch(Exception e){
            
               System.out.println("Error: " + e);
           }

    System.out.println(eingabe);
   }
}
 

faetzminator

Gesperrter Benutzer
wieso mit .contains() überhaupt überprüfen?
Java:
String[] foo = {"ä", ...};
String[] bar = {"ae", ...};
for (int i = 0; i < foo.length; i++) {
    input = input.replace(foo[i], bar[i]);
}
Anm.: es funktioniert bei dir nicht, weil du den Returnwert von replace einfach ins Leere geht.
 

Antoras

Top Contributor
Zu dem Thema hätte ich gerade auch noch eine Frage:

Mir ist aufgefallen, dass die verschiedenen OS Probleme damit haben Umlaute richtig darzustellen. Bspw. ist es so, dass wenn ich in Quelltext, den ich unter Linux erstellt habe, Umlaute verwende, diese unter Windows nicht richtig dargestellt werden, vorausgesetzt ich speichere den Quelltext auf einem USB-Stick und boote dann auf das andere OS um. Sie werden einfach durch kryptische Zeichen ersetzt. Grund dafür dürfte die Zeichencodierung der unterschiedliches OS sein. Allerdings kenne ich mich da nicht aus und weiß deswegen nicht wie ich das Problem in den Griff bekommen soll.

Vorerst hab ich damit aufgehört überhaupt Umlaute in Quelltexten zu verwenden. Weiß jemand zu dem Thema was?
 

0x7F800000

Top Contributor
wuerde ich nur ungerne auf zwei arrays aufteilen, lieber paare in ein array packen...
und ueberhaupt, kann man das doch auch etwas kuerzer fassen:
Java:
	public static String killUmlaut(String s){
		for(String[] pair:new String[][]{{"ä","ae"},{"ö","oe"},{"ü","ue"}}) 
			s=s.replace(pair[0],pair[1]);
		return s;
	}
*hack* :bae:

@Antoras: "Zeichenkodierung der unterschiedlichen OS"? Wohl eher der unterschiedlichen Editoren? Wenn du eclipse unter Linux startest, dort was bastelst, und eclipse wieder unter Windows startest, dürfte da nicht viel schief gehen... Wenn du aber in jedem OS irgendeinen anderen Editor verwendest, der jeweils andere default-einstellungen hat, dann kriegst du evtl irgendwelchen salat... kA, habe bisher niemals irgendwas außer ascii im code verwendet, sehe keine notwendigkeit da irgendwelche umlaute einzubauen, denglisch stinkt eh^^:)
 
Zuletzt bearbeitet:

rgrenzh

Mitglied
Danke für die Tipps! soweit klappt es jetzt, bekomme in der Ausgabe jedoch einen Fehler. (siehe unten) Weiter werden jetzt nur die Kleinbuchstaben berücksichtigt. Gibt es dafür eine Funktion oder muss ich in die Arrays auch die Großbuchstaben einfügen. (Was warscheinlich nicht sehr elegant wäre :) )

Code:
package tests;

import java.io.*;

public class umlaute {

    public static void main(String[] args)throws IOException{

    String vorname;
    String nachname;
    String username = null;
    String[] beforeSwitch = {"ä", "ö", "ü", "ß"};
    String[] afterSwitch = {"ae", "oe", "ue", "ss"};


        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("Bitte geben Sie Ihren Vorname ein: ");
        vorname = input.readLine();

        System.out.println("Bitte geben Sie Ihren Vorname ein: ");
        nachname = input.readLine();
       
        try{

            for(int i = 0; i < vorname.length(); i++){
                vorname = vorname.replace(beforeSwitch[i], afterSwitch[i]);
                break;
            }

            for(int i = 0; i < vorname.length(); i++){
                nachname = nachname.replace(beforeSwitch[i], afterSwitch[i]);
            }
    

          }catch(Exception e){
            
               System.out.println("Error: " + e);
           }

    System.out.println(vorname + " " + nachname);
   }
}


Code:
run:
Bitte geben Sie Ihren Vorname ein: 
älfred

Bitte geben Sie Ihren Vorname ein: 
schlößer

Error: java.lang.ArrayIndexOutOfBoundsException: 4
aelfred schloesser

BUILD SUCCESSFUL (total time: 14 seconds)
 
Zuletzt bearbeitet:

23

Bekanntes Mitglied
Wegen vorname.length(); in der zweiten Schleife musst du nachname.length() nehmen!

Mach aus deinen String Arrays bitte mal Char Arrays... das ist unsauber...

und warum ist in der ersten Schleife ein break?
 

Noctarius

Top Contributor
Ähm hallo? Oo Ein Array hat keine Funktion length!!! Sondern eine Property length

for (int i = 0; i < beforeSwitch.length; i++)
 

0x7F800000

Top Contributor
Wegen vorname.length(); in der zweiten Schleife musst du nachname.length() nehmen!
in den anderen fehler verschlimmbessert? :autsch:
Mach aus deinen String Arrays bitte mal Char Arrays... das ist unsauber...
Lass mal sehen, wie du "ae" in ein char packen willst :reflect:
und warum ist in der ersten Schleife ein break?
keine Ahnung.
WO ES NICHT AUF INDEX UND REIHENFOLGE ANKOMMT LIEBER IMMER FOREACH NEHMEN!
Java:
	public static String killUmlaut(String s){
		for(String[] pair:new String[][]{{"ä","ae"},{"ö","oe"},{"ü","ue"}}){
			s=s.replace(pair[0],pair[1]);
			s=s.replace(pair[0].toUpperCase(), pair[1].toUpperCase());
		}
		return s;
	}
Ähm hallo? Oo Ein Array hat keine Funktion length!!! Sondern eine Property length
find ich übrigens blöd... ist eine ausnahme, für die es imho keinen besonders guten Grund gibt... ???:L
 

faetzminator

Gesperrter Benutzer
Habs geändert Fehler kommt aber immer noch

Bitte geben Sie Ihren Vornamen ein:
Töf
Bitte geben Sie Ihren Nachnamen ein:
Töfüß
Error: java.lang.ArrayIndexOutOfBoundsException: 4
Toef Toefuess
gast23 hat auch einen völligen Sch* erzählt :lol:
Aber natürlich, es heisst weder
vorname.length();
noch
beforeSwitch.length();
sondern
beforeSwitch.length;
 

faetzminator

Gesperrter Benutzer
Strings haben eine Methode namens length, darum: string.length()
Arrays haben eine Property namens length, darum: array.length
 

23

Bekanntes Mitglied
nachname ist doch ein String...

und er hat in der nachnamen schleife bis vorname.length() replaced...

wo hab ich da bitte mist erzählt?

und er kann aus before ein char array machen... das kostet weniger vermutlich...
 

0x7F800000

Top Contributor
und er hat in der nachnamen schleife bis vorname.length() replaced...
wo hab ich da bitte mist erzählt?
die länge des arrays mit zu ersetzenden buchstaben hat weder was mit der länge des vornamens, noch mit der länge des nachnamens zu tun.
und er kann aus before ein char array machen... das kostet weniger vermutlich...
1) 2 Arrays sind eh eine dämliche Idee gewesen, auch wenn der OP sie trotzdem übernommen hat, da bleibe ich dabei...
2) replace(char c, String s) ist undefiniert => man müsste jedes mal Strings aus buchstaben erzeugen, was ja wohl völlig sinnfrei ist.
 

0x7F800000

Top Contributor
Etwa so unschön wie ein zweidimensionales Array? Natürlich könne man eine Map machen, aber ein Bisschen viel Aufwand? :)
Naja, 2D array finde ich da wesentlich angebrachter... zum einen ist das kürzer, zum anderen stehen die paare immer nebeneinander. Wenn man zB 15 buchstabenkombis ersetzen wollte, und sich dann irgendwo im zweiten array verzählt, sodass die zuordnung um +-1 verschoben wird, dann kriegt man eine ziemlich durcheinandergewürfelte ausgabe, und muss dann lange zählen, bis man sieht, an welcher stelle man sich verzählt hat...

Bei 2D Array stehen die paare dagegen direkt nebeneinander, ist doch auch einfacher zu lesen.

Wozu soll hier eine map denn gut sein? Dass man mehr rechenzeit für die Hashcode-berechnung braucht? Außerdem wären da viele extrazeilen nötig...
 

Antoras

Top Contributor
@Antoras: "Zeichenkodierung der unterschiedlichen OS"? Wohl eher der unterschiedlichen Editoren? Wenn du eclipse unter Linux startest, dort was bastelst, und eclipse wieder unter Windows startest, dürfte da nicht viel schief gehen... Wenn du aber in jedem OS irgendeinen anderen Editor verwendest, der jeweils andere default-einstellungen hat, dann kriegst du evtl irgendwelchen salat... kA, habe bisher niemals irgendwas außer ascii im code verwendet, sehe keine notwendigkeit da irgendwelche umlaute einzubauen, denglisch stinkt eh^^:)
Ich arbeite nur mit eclipse und die Einstellungen synchronisiere ich immer - allerdings fällt mir gerade ein, dass ich jedes Mal wenn ich mal wieder unter Windows programmiere eine Fehlermeldung, von wegen "konnte irgendwas nicht wiederherstellen", bekomme. Vllt. sind da doch ein paar Einstellungen falsch gesetzt. Werde ich mir mal angucken.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
L Collator Umlaute Java Basics - Anfänger-Themen 5
O URL, UTF8, Umlaute Java Basics - Anfänger-Themen 15
S Base64 - Wie beziehe ich die Umlaute in die Speicherplatzrechnung mit ein? Java Basics - Anfänger-Themen 52
F Umlaute beim versenden von SMS Java Basics - Anfänger-Themen 10
krgewb Input/Output Umlaute in generierter HTML-Datei Java Basics - Anfänger-Themen 7
C Java stellt unter Windows keine Umlaute dar Java Basics - Anfänger-Themen 9
W JTextField-Objekt liest Umlaute mit falschen Zeichen ein Java Basics - Anfänger-Themen 5
A Text mit "Scanner" eingeben und Umlaute ersetzen Java Basics - Anfänger-Themen 7
W HTML Code, Umlaute werden nicht richtig dargestellt Java Basics - Anfänger-Themen 7
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
S Codierung der Umlaute in Mails Java Basics - Anfänger-Themen 2
M Fileoutputstream: Linux Dateinamen mit Umlaute Java Basics - Anfänger-Themen 4
OnDemand Umlaute ausgeben Java Basics - Anfänger-Themen 7
V Umlaute in mysql, antscript, powershell utf-8 Java Basics - Anfänger-Themen 7
V Umlaute beim Parsen einer HTML Seite Java Basics - Anfänger-Themen 4
tuttle64 Keine Umlaute im Dos Fenster Java Basics - Anfänger-Themen 12
S Umlaute aus Dateisystem entfernen Java Basics - Anfänger-Themen 5
B InetAddress und umlaute Java Basics - Anfänger-Themen 2
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
D javadoc: wie werden Umlaute richtig dargestellt? Java Basics - Anfänger-Themen 3
B Input/Output Kodierte Umlaute aus Datei umwandeln? Java Basics - Anfänger-Themen 2
R Umlaute Mac -> Windows Java Basics - Anfänger-Themen 2
0 Umlaute Java Basics - Anfänger-Themen 4
R UTF-8 Webseite Umlaute lesen. Java Basics - Anfänger-Themen 2
F SQL Server aus Umlaute werden Fragezeichen Java Basics - Anfänger-Themen 4
P Umlaute in Datei ändern Java Basics - Anfänger-Themen 4
F Umlaute eines Strings entfernen (Verwendung von this?) Java Basics - Anfänger-Themen 2
S Eingabeaufforderung stellt Umlaute nicht dar Java Basics - Anfänger-Themen 10
A Umlaute darstellen Java Basics - Anfänger-Themen 4
M Umlaute in Java Applets? Java Basics - Anfänger-Themen 3
O Umlaute bei der Erfassung Java Basics - Anfänger-Themen 12
P Umlaute und Byte Java Basics - Anfänger-Themen 2
J Umlaute Java Basics - Anfänger-Themen 3
R Umlaute in einer .properties-Datei Java Basics - Anfänger-Themen 1
S Umlaute und Sonderzeichen erkennen Java Basics - Anfänger-Themen 12
C umlaute mit DataOutputStream schreiben Java Basics - Anfänger-Themen 3
N Umlaute ersetzen Java Basics - Anfänger-Themen 1
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
A switch statement Java Basics - Anfänger-Themen 4
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
X Enum Abfrage ohne if, for, while oder switch Java Basics - Anfänger-Themen 21
Lion.King switch-Befehl Java Basics - Anfänger-Themen 6
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
P9cman Vokal Zähler mit switch case und for-Schleife Java Basics - Anfänger-Themen 4
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
C if-Konstrukt durch switch-Konstrukt ersetzen Java Basics - Anfänger-Themen 14
1 Switch Case Java Basics - Anfänger-Themen 3
T Alternative für switch case Java Basics - Anfänger-Themen 1
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
W Taschenrechner mit Switch case Java Basics - Anfänger-Themen 4
B Notensystem Switch-Case Java Basics - Anfänger-Themen 31
S Switch-Case zur Berechnung der Einkommensteuer Java Basics - Anfänger-Themen 15
F Switch case wird als char nicht erkannt.... Java Basics - Anfänger-Themen 6
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
H Frage zur if-Bedingung bzw switch case Java Basics - Anfänger-Themen 6
S switch case fängt beim letzten case an Java Basics - Anfänger-Themen 6
J Parameterübergabe in switch? Java Basics - Anfänger-Themen 2
M Switch Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
F Switch Case Modulo berechnen Java Basics - Anfänger-Themen 12
F Erste Schritte Frage zu simplem Taschenrechner(switch) Java Basics - Anfänger-Themen 16
NoMercy BitFlags Programm (switch on/off , swap und isSet) Java Basics - Anfänger-Themen 7
S Switch-Case für eine Array-Zuordnung Java Basics - Anfänger-Themen 5
S switch und case Java Basics - Anfänger-Themen 1
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
B Problem bei switch statement Java Basics - Anfänger-Themen 4
D Klassen Problem bei switch-case? Java Basics - Anfänger-Themen 2
E Input/Output Switch ausgabe anpassen bzw. anders darstellen Java Basics - Anfänger-Themen 13
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
B Wiederholen einer if/switch-case Schleife Java Basics - Anfänger-Themen 9
X Nach switch case weiter mit Auswahl Java Basics - Anfänger-Themen 7
T switch case und continue Java Basics - Anfänger-Themen 5
D switch case Code Java Basics - Anfänger-Themen 3
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
Ponychan95 Erste Schritte Switch fällt immer bis zum default durch Java Basics - Anfänger-Themen 4
P Bei Switch-Anweisung wird default-Anweisung angezeigt Java Basics - Anfänger-Themen 4
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
O This in switch anweisung Java Basics - Anfänger-Themen 5
V Fehlerhafte BufferedReader/switch Benutzung? Java Basics - Anfänger-Themen 2
F Erste Schritte Switch case vs. Verschachtelte If Anweisung Java Basics - Anfänger-Themen 11
K Variablen RETURN in Case-Switch / This method must return a result of type Item Java Basics - Anfänger-Themen 4
R Methoden Switch wählt das Falsche Java Basics - Anfänger-Themen 17
B Erste Schritte Addition von double in switch-Anweisung Java Basics - Anfänger-Themen 2
M Endlosschleife bricht durch switch ab Java Basics - Anfänger-Themen 17
R Switch: Nach durchlaufen des Case wieder zum Menü Java Basics - Anfänger-Themen 3
D Array in switch Java Basics - Anfänger-Themen 3
A Switch Case Java Basics - Anfänger-Themen 5
Devil0s if vs. switch Java Basics - Anfänger-Themen 27
F Reset in der switch Anweisung Java Basics - Anfänger-Themen 3
R Compiler-Fehler Auf selben Array in mehreren "cases" vom "Switch" zugreifen Java Basics - Anfänger-Themen 11
R Switch Werte außerhalb verwenden Java Basics - Anfänger-Themen 2
D Eine Variable in mehreren "switch" Java Basics - Anfänger-Themen 24

Ähnliche Java Themen

Neue Themen


Oben