2012-12-03 12 views
12

ich den Wert von aphostrophe zu einem Zeichen zuweisen mag:Java - Weisen Unicode Apostroph verkohlen

char a = '\''; 

aber ich mag die Unicode-Version von Apostroph (\ u0027) verwenden, um es konsistent zu halten mit meinem Code:

char a = '\u0027'; 

Aber es auf diese Weise zu tun gibt eine Fehlermeldung, „unclosed Zeichenliteral“.

Wie kann ich diese Zuweisung durchführen, während der Unicode-Code noch im Code enthalten ist?

Antwort

11

Der Grund \u0027 nicht ist nicht funktioniert, dass die Unicode-Escape-sehr früh vom Compiler behandelt wird, und natürlich, es endet '   — ist auf die die wörtliche beendet. Der Compiler sieht dies tatsächlich:

char a = '''; 

... was natürlich ein Problem ist. Die JLS spricht darüber in Bezug auf Zeilenvorschübe und solche in §3.10.4 (Zeichenliterale).

Ehrlich gesagt, ich glaube, du bist am besten dran schriftlich

char a = '\''; 

... aber char ist ein numerischer Typ, so können Sie dies tun:

char a = 0x0027; 

Natürlich können Sie konnte dies tun:

char a = "\u0027".charAt(0); 

... aber ich denke, wir können Alle sind sich einig, dass das ein bisschen übertrieben ist. ;-)

Oooh, Check-out oder Greg's answer: char a = '\u005c\u0027'; (\u005c ist, natürlich, ein Backslash   — so dass der Compiler sieht '\'').

+0

Das Hauptproblem ist, das '\ u0027} wird vom Compiler sehr früh verarbeitet, also könnte dies am Ende seine beste (vielleicht sogar einzige) Option sein. – Brian

+0

Überprüfen Sie auch die Fußnoten am Ende der JLS, die Sie gerade in Ihrer Bearbeitung verlinkt haben. Es besagt, dass Sie etwas wie "\ u000a" nicht verwenden können, da es vor dem Kompilieren der Klasse in eine neue Zeile umgewandelt wird. – Brian

+0

@Brian: LOL überlappend bearbeiten und kommentieren, aktualisieren Sie die Seite. ;-) –

1

bevor javac etwas anderes tut, konvertiert es zunächst alle in ein char. so ist Ihr Code gleich

char a = '''; 

deshalb kompiliert es nicht.

\ u #### ist nicht nur für Char/String Literale, können Sie es überall verwenden, z. in Variablennamen.

jedoch verwenden Leute selten nicht lateinische Zeichen in den Kennzeichnern; wenn jemand das tut, wird er wahrscheinlich seinen heimischen Zeichensatz verwenden, und er wird auch nicht brauchen.

Daher sehen wir nie wirklich irgendwo anders als in Char/String-Literale, dies gibt den falschen Eindruck auf die ungeahnten.

Wenn es Zeitmaschine gibt, sollten wir diese Funktion wahrscheinlich beenden, da sie verwirrend ist und nicht verwendet wird.

0

Hier ist eine andere Option, in der Tat zuviel des Guten aber:

char c = "\u0027".charAt(0); 
7

du

auch tun können
char a = '\u005c\u0027'; 

wo \ u005c ist die Unicode für \

+0

LOL! Ich liebe es. Und angesichts des Grundes des OP, "' u0027 "überhaupt verwenden zu wollen, eine ziemlich gute Idee ... –