Bug? Encoding?

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

HonniCilest

Erfahrenes Mitglied
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
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…

Neue Beiträge