Anzeige

 Bug? Encoding?


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

HonniCilest

Erfahrenes Mitglied
#1
Java:
import java.util.Arrays;
import java.util.Scanner;

public class Shop {
   
    public class Item {
        private String name;
        private double price;
       
        public Item(String name, double price) {
            this.name = name;
            this.price = price;
        }

        public String getName() {
            return name;
        }

        public double getPrice() {
            return price;
        }
       
        @Override
        public String toString() {
            return name + " (" + price + "€/kg)";
        }
    }
   
    private Item[] items;
   
    public Shop() {
        items = new Item[]{
            new Item("Käse", 10.5),
            new Item("Wurst", 15.5),
            new Item("Butter", 8.0)
        };
    }

    public Item[] getItems() {
        return items;
    }
   
    public Item findItemByName(String name) {
        return Arrays.stream(items)
                .filter(item -> item.getName().equalsIgnoreCase(name))
                .findAny()
                .orElse(new Item("Nichts Verfügbares", 0.0));
    }
   
    public static void main(String[] args) {
        Shop shop = new Shop();
        Scanner in = new Scanner(System.in);
       
        System.out.println("Angebot:");
        for(Item item : shop.getItems()) {
            System.out.println(item);
        }
       
        System.out.println();
        System.out.println("Auswahl?:");
        Item item = shop.findItemByName(in.nextLine());

        System.out.println("Du möchtest kaufen:");
        System.out.println(item);               
    }
}
Hierbei handelt es sich nur um einen Prototypen meines Problems um den Fehler darzustellen. Dieser Prototyp ist keine Darstellung meines eigentlichen Programms.

Problem: Sobald ich bei der Auswahl etwas mit Umlauten auswähle (Im obigen Beispiel 'Käse'), erhalte ich die Ausgabe "Nichts Verfügbares". 'Wurst' und 'Butter' hingegen funktionieren wie gewünscht.

Frage: Ist das ein Bug oder könnt ihr ein Generelles Problem in diesem Prototyp sehen? Der Fehler tritt auch mit dem Schleifen-Repräsentant des Streams auf. Vermutlich ist es ein Encoding-Problem, aber welches Encoding müsste ich dem Scanner dann mitteilen um eine korrekte Ausgabe zu erhalten? Ausgeführt mit Netbeans.
 

HonniCilest

Erfahrenes Mitglied
#4
Ich vermute, dass dein Scanner (Zeile 52) mit dem Platform-Encoding (CP1252) arbeitet, wohingegen deine Sourcen mit UTF-8 kodiert sind.
Versuche mal folgendes (ungetestet)
Das dachte ich mir bereits und hatte es mit UTF-8 probiert, aber ohne Erfolg. Dennoch hat mich das Plattform-Encoding weitergebracht, denn das Gegenteil war anscheinend der Fall:

Java:
Scanner in = new Scanner(System.in, "CP1252"); // Lösung


PS.: Ich bin blind, ich finde den "erledigt" Button nicht...
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Anzeige

Neue Beiträge

Anzeige