2016-04-16 13 views
0
public class TruthTableValue { 
    private boolean truthValue; 
    private String name = ""; 

    private int unicodeStartNameValue = 41; /* 
    * we want our String always to start with A and then go up the alphabet. 
    * this can be done using the unicode 16. 
    */ 

    public TruthTableValue() { 
     truthValue = true; 
     name += "\u00" + Character.toString((char)unicodeStartNameValue); 
     unicodeStartNameValue++; 
    } 

    public String getName() { 
     return name; 
    } 
} 

In diesem Code, den ich versuche, ein Objekt zu haben, die ein Objekt mit einem Namen nach jeder Generation erzeugt, die auf die Unicode „\ u00“ + „41“ oder „42“ gleich oder "43" und so weiter (A, B, C und so weiter). Mein Problem ist, dass "\ u00" in Übereinstimmung mit dem Compiler kein "gültiger Unicode" ist, so dass es nicht richtig kompiliert und es auch nicht möglich ist, es auszuführen.Concatenate String in Java Unicode

Wie lösche ich den Kompilierfehler oder wie löse ich dieses Problem im Allgemeinen?

Vielen Dank im Voraus!

+1

Was sollte getName() zurückgeben? Dieser Code hat einen booleschen Wert, der nirgendwo verwendet wird, eine Ganzzahl, die im Konstruktor inkrementiert wird, aber nirgends verwendet wird, und einen Namen, der mit etwas initialisiert wird, das nicht kompiliert wird. Was versuchst du zu erreichen? Um einen String mit dem Zeichen 0x41 zu verketten, brauchen Sie nur 's + = (char) 0x41; ' –

+0

Entfernen' '\ u00" + '. – saka1029

+0

Unicode für einen Großbuchstaben A ist \ u0041. Nachdem ein Objekt generiert wurde (in einer anderen Klasse), wird der UnicodeStartNameValue inkrementiert und sollte mit 42 verkettet werden, was zu einem Namen von B für mein zweites Objekt führen würde. Um diesen Namen zu erhalten, habe ich den getter getName() erstellt, der den Namen String zurückgibt, der ein Unicode –

Antwort

2

"\u0041" in einem Java-Programm wird vom Compiler verarbeitet, nicht zur Laufzeit. Wenn der Java-Compiler dies in einem Programm sieht, wird es als die Zeichenfolge "A" behandelt. (Das ist, warum Sie einen Fehler erhalten, der Compiler nicht weiß, was zu tun ist, wenn \u nicht durch vier hexadezimalen Ziffern folgt.)

Wenn Sie etwas wollen, das die 6-stellige Zeichenfolge "\\u0041"-"A" wandelt bei Laufzeit, müssen Sie eine Bibliotheksmethode dafür finden. Ich weiß es nicht, und es ist der harte Weg, es trotzdem zu tun. In Java ist eine char bereits eine Nummer. Also, wenn Sie sagen

private char unicodeStartNameValue = 0x41; 

statt

private int unicodeStartNameValue = 41; 

und halten 1 zum char Hinzufügen, werden Sie die Zeichen haben Sie wollen, und Sie können sie in Strings mit Character.toString(charValue), umwandeln, die zurückkehren würde eine 1-stellige Zeichenfolge. (Wenn Sie nur 41 sagen, das ist eine Dezimalzahl, und erste Zeichen wären ')', nicht 'A'.)

Ihre Idee nicht funktionieren würde, wie auch immer, weil Sie nicht "\u004a" bekommen würden. Wenn Sie eine Dezimalzahl beibehielten und versuchen würden, sie an "\u00" anzufügen, wäre Ihre Folge A, B, C, D, E, F, G, H, I, P, Q, R, ..., da dies der Fall wäre springen von "\u0049" zu "\u0050".

+0

Perfekt klar erklärt mit allen Nuancen. Vielen Dank! –