2016-11-23 3 views
-7

Als ichWarum führt die Eingabe von "Î" zu einem Scanner zu einem falschen Zeichen?

String message="Î" 

und nehmen Sie den numerischen Wert des ersten Zeichens tun mit:

int x=message.charAt(0); 

Der Ausgang ist 206, was richtig ist. wenn ich Eingabe jedoch Î auf einen Scanner, wie folgt aus:

Scanner in=new Scanner(System.in); 
String message=in.next(); // typing Î 

der numerische Wert des ersten Zeichens, wie er von:

int x=message.charAt(0); 

ist jetzt 65533, was falsch ist.

Dies ist der vollständige Code:

System.out.println("Insert string here:"); 
Scanner in=new Scanner(System.in); 
String s=in.next(); 
for(int i=0;i<s.length();i++) 
{ 
    System.out.println("Codice carattere:"+(int) s.charAt(i)); 
} 

, die die falsche 65533 ausgibt, wenn Î Eingabe, und dies ist der vollständige Code:

String s="Î"; 
for(int i=0;i<s.length();i++) 
{ 
    System.out.println("Codice carattere:"+(int) s.charAt(i)); 
} 

, die das Recht gibt 206

Wie kann ich es mit Scanner arbeiten lassen?

+3

Glauben Sie, dass ein anderer Mensch Ihr Problem wirklich von dem verstehen kann, was Sie geschrieben haben? – Idos

+1

Er fragt sich, warum der numerische Wert von "Î" sich unterscheidet, wenn das Zeichen vom Scanner gelesen und in einer Zeichenfolge gespeichert wird, anstatt die Zeichenfolge mit dem Zeichen von Anfang an zu haben. Nun, post a [mcve] und wir werden sehen. – Gendarme

Antwort

3

Der Wert 65533 ist 0xFFFD. Dies ist das Unicode "Ersatzzeichen", das anstelle eines Zeichens verwendet wird, das nicht darstellbar ist. Es wird normalerweise als " " angezeigt. Der Grund, warum Sie dies bekommen, könnte sein, dass Ihre Standardeingabe (Tastatur?) Nicht in der Lage ist, das Zeichen "Î" zu erzeugen. Versuchen Sie stattdessen, dieses Zeichen in eine Textdatei einzufügen und die Textdatei dann in die Standardeingabe umzuleiten. (Stellen Sie sicher, dass die Textdatei nicht mit einer Byte Order Mark beginnt, was passiert, wenn Sie Windows Notepad verwenden.)

Verwandte Themen