tl; др
String s = Character.toString( 128_567 ) ;
?
Подробности
Вы запросили объект Character
, String
или некоторая реализация CharSequence
.
Character
Класс Character
на самом деле legacy , простая обертка объекта вокруг примитивного типа char
. Тип char
также является устаревшим и определяется внутренне как 16-разрядное число, ограниченное первыми 64 КБ кодовых точек Unicode. Юникод теперь имеет более чем вдвое больше кодовых точек, назначенных символам, поэтому char
не может представлять большинство символов.
Таким образом, мы не можем создать экземпляр объекта Character
для символа вне набора Basi c Многоязычная . Таким образом, в качестве обходного пути, Character.toString( int )
создает String
, содержащий один символ. String
может обрабатывать любые символы Юникода, в то время как Character
не может.
String
? Character.toString( int )
Чтобы получить объект String
, содержащий один символ, определяемый int
, передайте int
в Character.toString()
.
В качестве примера мы используем FACE WITH MEDICAL MASK
, символ смайлика в U + 1F637 (десятичное число: 128 567).
// -----| input |----------------
String input = "?" ; // FACE WITH MEDICAL MASK at code point U+1F637 (decimal: 128,567).
int codePoint = input.codePointAt( 0 ) ; // Returns 128,567.
System.out.println( "codePoint : " + codePoint ) ;
codePoint: 128567
Преобразовать эту int
примитивную переменную в String
.
// -----| String |----------------
String output = Character.toString( codePoint ) ; // Pass an `int` primitive integer number.
System.out.println( "output : " + output ) ;
вывод: ?
Или используйте буквенное целое число.
String output2 = Character.toString( 128_567 ) ; // Pass an integer literal.
System.out.println( "output2 : " + output2 ) ;
output2: ?
См. Этот код, запущенный на IdeOne.com .
CharSequence
Приведенный выше код работает, так как String
является реализацией CharSequence
.
CharSequence cs = Character.toString( 128_567 ) ; // Returns a `String` which is a `CharSequence`.
Я удивлен, что не могу найти способ добавить символ к объекту классов StringBuilder
или StringBuffer
, которые реализуют CharSequence
. Опять же, возможно, я не заметил такой метод.