seltsame Zahlenumwandlung in Java

7

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?

    
ayeen c 20.03.2014, 20:48
quelle

5 Antworten

7

Wie in der Java-Sprachspezifikation angegeben,

%Vor%

das folgende String oder Zeichenliteral ist eine oktale Flucht

%Vor%

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

%Vor%

, das beim Ausdruck als

gedruckt wird %Vor%

, weil der Wert gespeichert ist.

    
Sotirios Delimanolis 20.03.2014 20:57
quelle
7

"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.

    
Jake Chasan 20.03.2014 20:49
quelle
5

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 '?' .

    
ajb 20.03.2014 20:57
quelle
4

"" ist eine oktale Escape-Sequenz. Es ist dezimal 63 oder das '?' -Zeichen.

    
erickson 20.03.2014 20:56
quelle
0

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 ...

    
ayeen c 21.03.2014 14:54
quelle

Tags und Links