Преобразование Unicode в строку в Java - PullRequest
5 голосов
/ 20 декабря 2009

Я строю язык, игрушечный язык. Синтаксис \#0061 должен преобразовывать данный Unicode в символ:

String temp = yytext().subtring(2);

Затем, после этой попытки добавить '\u' к строке, я заметил, что сгенерировал ошибку.

Я также пытался "\\" + "u" + temp; таким способом не делать никаких преобразований.

Я в основном пытаюсь преобразовать Unicode в символ, предоставляя только '0061' методу, help.

Ответы [ 4 ]

11 голосов
/ 20 декабря 2009

Снимите '#' и используйте Integer.parseInt("0061", 16) для преобразования шестнадцатеричных цифр в int. Затем приведите к char.

(Если бы вы внедрили лексер вручную, альтернативно было бы сделать преобразование на лету, когда ваш лексер соответствует литералу юникода. Но перечитывая вопрос, я вижу, что вы используете генератор лексера ... хороший ход!)

2 голосов
/ 20 декабря 2009

Я в основном пытаюсь конвертировать Unicode для персонажа, предоставляя только «0061» к методу, помогите.

char fromUnicode(String codePoint) {
  return (char)  Integer.parseInt(codePoint, 16);
}

Вам нужно обрабатывать неверные данные и тому подобное, но это будет работать иначе.

2 голосов
/ 20 декабря 2009

Вам необходимо преобразовать конкретную кодовую точку в char. Вы можете сделать это с помощью регулярных выражений:

String string = "blah #0061 blah";

Matcher matcher = Pattern.compile("\\#((?i)[0-9a-f]{4})").matcher(string);
while (matcher.find()) {
    int codepoint = Integer.valueOf(matcher.group(1), 16);
    string = string.replaceAll(matcher.group(0), String.valueOf((char) codepoint));
}

System.out.println(string); // blah a blah

Изменить в соответствии с комментариями, если это один токен, то просто сделайте:

String string = "0061";
char c = (char) Integer.parseInt(string, 16);
System.out.println(c); // a
0 голосов
/ 20 декабря 2009

\uXXXX - escape-последовательность. Перед выполнением оно уже было преобразовано в фактическое значение символа, которое в любом случае не «оценивается» во время выполнения.

Что вы, вероятно, хотите сделать, - это определить соответствие из вашего синтаксиса #XXXX кодовым точкам Unicode и привести их к char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...