12

アフォストロフィーの値を char に割り当てたい:

char a = '\'';

ただし、コードとの一貫性を保つために、Unicode バージョンのアポストロフィ (\u0027) を使用したいと思います。

char a = '\u0027';

しかし、このようにすると、「閉じられていない文字リテラル」というエラーが発生します。

コードに Unicode コードを保持しながら、この割り当てを行うにはどうすればよいですか?

4

4 に答える 4

12

\u0027うまくいかない理由は、Unicode エスケープがコンパイラーによって非常に早い段階'で処理されるため です。コンパイラは実際にこれを見ます:

char a = ''';

...これは当然問題です。JLS は、 §3.10.4 ( Character Literals ) で改行などに関連してこれについて説明しています。

率直に言って、私はあなたが書いたほうがいいと思います

char a = '\'';

...しかしchar、数値型なので、これを行うことができます:

char a = 0x0027;

もちろん、これを行うことができます:

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

...しかし、それは少しやり過ぎだと誰もが同意できると思います。;-)

または、グレッグの答えをチェックしてください: char a = '\u005c\u0027';(\u005cはもちろん、バックスラッシュです。コンパイラは を認識します'\'')。

于 2012-12-03T23:05:36.923 に答える
9

これもできます

char a = '\u005c\u0027';

\u005cは\の Unicode です

于 2012-12-03T23:12:47.687 に答える
1

javac は他の処理を行う前に、まずすべての \u#### を char に変換します。あなたのコードは

char a = ''';

それがコンパイルされない理由です。

\u#### は、文字/文字列リテラルだけでなく、変数名など、どこでも使用できます。

ただし、識別子に非ラテン文字を使用することはめったにありません。誰かがそうするなら、彼はおそらく彼のネイティブの文字セットを使用し、\u#### も必要としません。

したがって、文字/文字列リテラル以外の場所で \u#### を実際に目にすることはありません。これは、疑いを持たない人に間違った印象を与えます。

タイム マシンがある場合は、この機能を削除する必要があります。混乱を招き、使用されていないためです。

于 2012-12-03T23:09:04.110 に答える
1

ここに別のオプションがありますが、実際にはやり過ぎです。

char c = "\u0027".charAt(0);
于 2012-12-03T23:10:23.670 に答える