2016-04-16 8 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; 
    } 
} 

このコードでは、すべての世代の後にユニコード "\ u00" + "41"または "42"に等しい名前のオブジェクトを作成しようとします。 "43"など(A、B、Cなど)。 私の問題は、 "\ u00"は "有効なユニコード"ではなくコンパイラに従っているため、正しくコンパイルされず、実行できないということです。文字列をJavaでUnicodeに連結する

コンパイルエラーを取り除くにはどうすればよいですか、またはこの問題を一般的にどのように解決すればよいですか?

ありがとうございます!

+1

getName()は何を返しますか?このコードには、どこでも使用されないブール値、コンストラクタでインクリメントされますがどこでも使用されない整数、コンパイルされないもので初期化された名前があります。あなたは何を達成しようとしていますか?文字列をchar 0x41と連結するには、 's + =(char)0x41;' –

+0

'' \ u00 "を削除するだけです。 – saka1029

+0

大文字のAのUnicodeは\ u0041です。 1つのオブジェクトが(別のクラスで)生成された後、unicodeStartNameValueがインクリメントされ、\ u00が42と連結され、その結果、2番目のオブジェクトの名前がBになります。この名前を取得するために、getter getName()を作成しました。これは、文字列nameを返します。文字列は、Unicode –

答えて

2

"\u0041"は、実行時ではなく、コンパイラによって処理されます。 Javaコンパイラがこれをプログラムで見ると、それは文字列"A"として扱われます。 (あなたがエラーを取得している理由です。\uは4進数字が続くされていない場合、コンパイラは何をすべきか分かっていない。)

をあなたがで"A"に6文字の文字列"\\u0041"に変換何かをしたい場合実行時間の場合は、そのためのライブラリメソッドを見つける必要があります。とにかくそれをするのは難しい方法です。 Javaでは、charは既に数字です。あなたの代わりに

private int unicodeStartNameValue = 41; 

private char unicodeStartNameValue = 0x41; 

を言うとcharに1を追加し続けるのであれば、あなたがしたい文字があるでしょう、そしてあなたは戻ってくるCharacter.toString(charValue)と、文字列、それらを変換することができます1文字の文字列。あなたが"\u004a"を取得することができなくなるので(あなただけ41を言うなら、それは小数だし、最初の文字が')'、ない'A'だろう。)

あなたのアイデアは、とにかく、動作しないでしょう。 10進数を保持していて、"\u00"に追加しようとすると、シーケンスはA、B、C、D、E、F、G、H、I、P、Q、R、...となります。 "\u0049"から"\u0050"にジャンプします。

+0

すべてのニュアンスで完璧に説明されています。ありがとう! –