Java. Назначение апострофа юникода для char
Я хочу присвоить значение aphostrophe char:
char a = '\'';
Однако я хотел бы использовать unicode-версию apostrophe (\ u0027), чтобы поддерживать ее в соответствии с моим кодом:
char a = '\u0027';
Но делать это таким образом дает ошибку, говорящую "незамкнутый символьный литерал".
Как я могу выполнить это назначение, сохраняя код кода unicode в коде?
Ответы
Ответ 1
Причина \u0027
не работает, так это то, что escape-код unicode обрабатывается очень рано компилятором, и, конечно же, он заканчивается '
— который завершает литерал. Компилятор действительно видит это:
char a = ''';
... что естественно является проблемой. JLS говорит об этом по отношению к линейным каналам и тому подобное в §3.10.4 (символьные литералы).
Честно говоря, я думаю, что лучше всего писать
char a = '\'';
... но char
является числовым типом, поэтому вы можете сделать это:
char a = 0x0027;
Конечно, вы можете сделать это:
char a = "\u0027".charAt(0);
... но я думаю, мы все можем согласиться, что немного переборщить.; -)
Oooh, или зайдите Greg answer: char a = '\u005c\u0027';
(\u005c
, конечно, обратная косая черта — поэтому компилятор видит '\''
).
Ответ 2
Вы также можете сделать это
char a = '\u005c\u0027';
где \u005c является Unicode для\
Ответ 3
прежде чем javac сделает что-нибудь еще, он сначала преобразует все \u #### в char. поэтому ваш код эквивалентен
char a = ''';
почему он не компилируется.
\ u #### не только для char/строковых литералов, вы можете использовать его в любом месте, например. в именах переменных.
однако люди редко используют латинские символы в идентификаторах; если кто-то это сделает, он, вероятно, будет использовать свою собственную кодировку, и ему тоже не понадобится \u ####.
поэтому мы никогда не видим \u #### где угодно, кроме как в char/строковых литералах, это дает неправильное впечатление непредвиденному.
Если есть машина времени, мы, вероятно, должны убить эту функцию, так как она запутывает и не используется.
Ответ 4
Здесь другой вариант, действительно, перебор:
char c = "\u0027".charAt(0);