Перевод кода в char и обратно
char — беззнаковая 16-битная code unit UTF-16. При арифметике он продвигается до int:
char letter = 'A';
int codeUnit = letter; // 65
int expression = letter + 1; // 66, тип int
char next = (char) expression; // 'B'Цифра и ее код
Это разные операции:
char digit = '7';
int code = digit; // 55
int value = Character.digit(digit, 10); // 7
int asciiOnly = digit - '0'; // 7, только после проверки '0'..'9'Обратное преобразование:
char digit = Character.forDigit(7, 10); // '7'Смещение символа
Идея исходной задачи — прибавить смещение к char:
static char shiftCodeUnit(char source, int offset) {
int result = source + offset;
if (result < Character.MIN_VALUE || result > Character.MAX_VALUE) {
throw new IllegalArgumentException("char overflow");
}
return (char) result;
}Это сдвигает code unit, а не «следующую букву алфавита»: между Unicode-кодами могут быть не-буквы, а supplementary-символ состоит из пары surrogate.
Для полного code point:
int codePoint = "😀".codePointAt(0);
String symbol = new String(Character.toChars(codePoint));См. Символы char Java.
На собеседовании
- Тип выражения
char + int?int. - Чем
(int) '7'отличается от числового 7? Первое — кодовая единица 55. - Вмещает ли char любой Unicode-символ? Нет, только одну UTF-16 code unit.
- Как создать строку из code point?
new String(Character.toChars(codePoint)).