Ich teste etwas und rufe die StringTokenizer
auf und bekomme eine seltsame Konvertierung ... vergiss die Tatsache, dass ich die \
in "67546"
abgrenzen sollte, aber ich bin nur neugierig was mit der bis
in Java
hier ist mein Code:
%Vor%Hier ist die Ausgabe:
%Vor% Wenn Sie bemerken, dass in meinem ursprünglichen String
?
geworden ist ..... ist das wie ein Unicode-Ding?
Wie in der Java-Sprachspezifikation angegeben,
%Vor% das folgende String
oder Zeichenliteral ist eine oktale Flucht
In oktal ist der Wert 77
63
, was das ?
-Zeichen ist.
Beachten Sie, dass dies nichts mit StringTokenizer
zu tun hat. Es gilt für Ihr String
literal
, das beim Ausdruck als
gedruckt wird %Vor%, weil der Wert gespeichert ist.
"77" in ASCII ist ein "?". Es scheint, dass Java das int automatisch in ein char konvertiert hat.
Hier ist ein allgemeiner Fix, der für Sie arbeiten kann. Es funktioniert für viele verschiedene Fälle und viele verschiedene Programmiersprachen. Sie können ein weiteres "\" vor dem 77 hinzufügen. Am wahrscheinlichsten wird der doppelte Backslash in einen einzelnen Backslash konvertiert, wenn Java den Code verarbeitet.
In diesem Zeichenfolgenliteral:
%Vor% Sie haben vergessen, dem letzten \
zu entkommen. Was tatsächlich passiert, ist folgendes: Nach JLS 3.10.6 kann \
von einer, zwei oder drei Oktalziffern gefolgt werden, und wenn es von drei Oktalziffern gefolgt wird, muss die erste 0 bis 3 sein. Der Compiler wird Nimm den längsten Teilstring, der die Regel erfüllt. Da 6
den Regeln nicht folgt (die erste Ziffer ist größer als 3), bedeutet das, dass als Escape-Sequenz interpretiert wird, wobei 77 als Oktalzahl behandelt wird, was 63 in Dezimal entspricht, was der ASCII-Code für
'?'
.
""
ist eine oktale Escape-Sequenz. Es ist dezimal 63 oder das '?'
-Zeichen.
danke für diejenigen, die sagten, es ist oktal ... das macht Sinn ...
Ich wusste nicht, Java konvertiert automatisch diese Arten von Zahlen zu oktal (0 \ 11 bis 0 \ 77), ich hätte gedacht, dass es mir nur einen Compilerfehler geben würde, um meine \ richtig nicht zu begrenzen ... ich bekomme a Compiler-Fehler, wenn die Zahlen nach meinem \ ist 8 und 9 (dh: 0 \ 88 und 0 \ 99)
für diejenigen, die sagten, ich sollte ein weiteres hinzufügen, ich bin nicht sicher, ob ihr meinen Disclaimer gesehen habt, der sagt: "Vergiss die Tatsache, dass ich das \ in der" \ 7767546 "abgrenzen sollte, aber ich bin nur neugierig was ist mit den \ 11 bis \ 77 in Java "aber nur das gleiche danke für die Sorge ...
Tags und Links java