Java Umlaute ersetzen Scanner?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Sofern du Umlaute verwendest, wäre es vielleicht besser ein anderes Encoding beim Lesen der Daten zu verwenden:

Scanner s = new Scanner(System.in, "ISO-8859-1");
7

Vielen Dank! Eigentlich könnte ich auch nur Scanner s = new Scanner(System.in); machen oder ?

0
7
@DarkxAxngel

Ja hab ich ja schon probiert, klappt auch ^^ Nur wollte ich wissen für was man dieses Encoding braucht, weil in der Schule wurde uns das nicht erklärt.

0
35
@sako14

 Eigentlich könnte ich auch nur Scanner s = new Scanner(System.in); machen oder ?

In dem Falle wird da Standard-Charset verwendet, was nicht immer dasselbe sein muss je nach JavaVM und Rechner.

Explizit das Encoding anzugeben, halte ich durchaus für wichtig.

Ich persönlich hatte erst den Fall, dass ich deshalb einen Fehler auf Rechner B hatte, den ich auf Rechner A nicht nachvollziehen konnte, bis ich durch Zufall auf das Charset stieß.

0
35
@sako14

Beim Encoding geht es darum, wie die erhaltenen Bytes interpretiert werden um daraus Lesbare Zeichen zu machen.

Dabei ist "kurz gesagt" Das ISO-8859-1" Encoding das "ältere". Dass eigentlich weniger Zeichen kennt als UTF-8.

Das Problem, was du hast: Die Konsole auf der du das eingibst ist mit ISO-8859-I kodiert. Wenn du diese aber nun mit UTF-8 liest, gibt es an einigen Stellen eben Differenzen, wie bei den Umlauten.

0

Vielleicht ist deine .java ja nicht UTF-8 sondern ANSI mit Umlauten? Versuch doch mal die \uHEX0 Kombinationen statt den reinen Zeichen. Du könntest du einfach eine Bestätigung zu haben dir ja auch mal die Charcodes ausgeben lassen ((int)DeinString.charAt(index))

35

Nur wenn der Scanner bereits die Zeichen beim lesen 'nicht versteht', wird es zu einem Problem...

Da mit UTF-8 gelesen wird, ist die Information bereits vor der 'Weiterverarbeitung' verloren, denn die Umlaute werden durch ein kryptisches Zeichen ersetzt, aus dem kein \uHEX mehr lesbar ist.

0
40
@KnusperPudding

UTF-8 kann deutlich mehr Informationen halten als ISO-8859-1, da sollte nichts verloren gehen. (nein, es ist nicht auf 8Bits begrenzt, UTF-16 ist auf 16Bits begrenzt, aber UTF-8 geht bis 8Bytes mit dann 42Bits)

0

Wie findet ihr meinen Java Taschenrechner?

public static void main(String args []) {
  Scanner s = new Scanner (System.in);
  System.out.println("Hallo, dies ist ein Taschenrechner");
  Methode();
  System.out.println("Möchtest du nochmal rechnen?: j/n");
  String Nochmal = s.next();

  if (Nochmal.equals("j")) {
    Methode();
  }
  else
  {
    System.out.println("Vielen Dank und auf Wiedersehen!");
  }
}

public static void Methode() {
  Scanner s = new Scanner (System.in);
  boolean bool;
  System.out.println("Wähle eine Rechenoperation aus. Zur Auswhl stehen: +,-,/,");
  String Operationszeichen = s.next();

  do {
    if (Operationszeichen.equals("+")) {
      System.out.println("Eingabe bestätigt.");
      bool = true;
    }
    else if (Operationszeichen.equals("-")) {
      System.out.println("Eingabe bestätigt.");
      bool = true;
    }
    else if (Operationszeichen.equals("/")) {
      System.out.println("Eingabe bestätigt.");
      bool = true;
    }
    else if (Operationszeichen.equals("")) {
      System.out.println("Eingabe bestätigt.");
      bool = true;
    }
    else {
      bool = false;
      System.out.println("Eingabe nicht verstanden. Bitte wähle eine gültige Rechenoperation aus.");
      Operationszeichen = s.next();
    }
  }

  while(bool == false);

  System.out.println("Nun gib zwei Zahlen ein, mit denen gerechnet werden soll");
  double a = s.nextInt();
  double b = s.nextInt();
  double c;

  if (Operationszeichen.equals("+")) {
    c = a + b;
  }
  else if (Operationszeichen.equals("-")) {
    c = a - b;
  }
  else if (Operationszeichen.equals("/")) {
    c = a / b;
  }
  else {
    c = a * b;
  }

  System.out.println("Das ergebnis lautet: " + c);
}
...zur Frage

Java abfangen von fehlerhaften eingabe

Hey Leute! ich bin grade einen kleinen Taschenrechner am programmieren und will aber Buchstaben und Zeichen und sowas mit try catch abfangen.. hab das ganze in einer eigenen klasse geschrieben aber wenn ich das programm jetzt starte und zum testen einen buchstaben eingebe, wird der programm abgebrochen und ich weiß einfach nicht, was an meinem code falsch ist.. hier zur vorschau:

public static int set1(int intNum1, String strNum1) {

    Scanner rec= new Scanner(System.in);
    String strNum11 = rec.nextLine();
            try {   
                intNum1 = Integer.parseInt(strNum11);
                System.out.println("Ihre Zahl lautet: " + intNum1);
            } catch (Exception e) {
                String intNum11 = rec.next();
                System.out.println(intNum11
                        + " ist keine Zahl. Versuchen sie es erneut."); 

                rec.close();
            }
        return intNum1;

    }
...zur Frage

Warum wird mir der Fehler in Java angezeigt?

Hallo Freunde, ich bin gerade dabei einen BMI Rechner in Java (NetBeans) zu programmieren. Allerdings kommt immer bei der if /else if abfrage ein Fehlercode. Ich weiß nicht warum der kommt. Hab mir schon Videos angesehen etc aber bei denen ging das alles. if(Alter<=24) if(ergebnis>=0) System.out.println("ACHTUNG!!! Du hast ein Untergewicht"); if else(ergebnis>=19) System.out.println("PERFEKT!!! Du hast ein Normalgewicht"); if else(ergebnis>=24) System.out.println("ACHTUNG!!! Du hast leicht erhöhtes Übergewicht");

bei den zwei if else Abfragen kommt ein Fehler. Ich hab auch nochmal den ganzen Quelltext reingestellt damit man es sich komplett angucken kann. Hoffe jmd kann mit helfen :)

package bmirechner; import java.util.Scanner;

public class BMIrechner {

public static void main(String[] args) {

    double Körpergröße;
    double Gewicht;
    double Geschlecht;
    double ergebnis;
    int Alter;
    Scanner ScannerKörpergröße = new Scanner(System.in);
    Scanner ScannerGewicht = new Scanner(System.in);
    Scanner ScannerGeschlecht = new Scanner(System.in);
    Scanner ScannerAlter = new Scanner(System.in);

    System.out.println("Herzlich Willkommen zum BMI Rechner von Valentin Wagner");
    System.out.println("Sind Sie ein Mann oder eine Frau?");
    System.out.println("Geben Sie (1) für Frau ein und (2) für Mann ein");
    Geschlecht=ScannerGeschlecht.nextDouble();
    System.out.println("Wie alt sind sie?");
    Alter=ScannerAlter.nextInt();
    if(Geschlecht == 1){
        System.out.println("Bitte geben sie Ihre Körpergröße an");
        Körpergröße=ScannerKörpergröße.nextDouble();
        System.out.println("Bitte geben sie Ihr Gewicht an");
        Gewicht=ScannerGewicht.nextDouble();
        ergebnis=Gewicht / (Körpergröße * Körpergröße);
        System.out.println("Ihr BMI beträgt: " + ergebnis);
        if(Alter<=24)
            if(ergebnis>=0)
                    System.out.println("ACHTUNG!!! Du hast ein Untergewicht");
            if else(ergebnis>=19)
                    System.out.println("PERFEKT!!! Du hast ein Normalgewicht");
            if else(ergebnis>=24)
                    System.out.println("ACHTUNG!!! Du hast leicht erhöhtes Übergewicht");
...zur Frage

Was möchtest Du wissen?