Unicode к преобразованию строк в Java

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

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

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

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

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

5
задан unwind 21 December 2009 в 08:14
поделиться

4 ответа

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

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

11
ответ дан 18 December 2019 в 11:57
поделиться

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

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

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

2
ответ дан 18 December 2019 в 11:57
поделиться

Вам необходимо преобразовать конкретную кодовую точку в 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
2
ответ дан 18 December 2019 в 11:57
поделиться

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

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

0
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: