MyTetra Share
Делитесь знаниями!
Кодовые точки и единицы
Время создания: 15.02.2022 23:40
Текстовые метки: java,конспект
Раздел: Программирование - Конспекты - Java
Запись: spline1986/tetra/master/base/1644950428b98730sny9/text.html на raw.githubusercontent.com

Строки в Java реализованы в виде последовательностей значений типа char. Этот тип хранит кодовые единицы юникода в кодирове UTF-16. Наиболее часто употребляемые символы представлены одной кодовой единицей, а дополнительные символы — двумя.


Метод String.length() возвращает количество кодовых единиц в строке. Чтобы определить количество кодовых точек необходимо воспользоваться методом String.codePointsCount(<start>, <end>). Метод String.charAt(n) возвращает кодовую единицу на позиции n, где n находится в диапазоне от 0 до String.length() - 1.


Для получения i-той кодовой точки служат выражения


String greeting = "Hello";

int index = greeting.offsetByCodePoints(0, i);

int cp = greeting.codePointAt(index);


Просмотреть строку посимвольно можно следующим образом:


int i = 0;

while (i < greeting.length()) {

int cp = greeting.codePointAt(i);

if (Character.isSupplementaryCodePoint(cp)) i += 2;

else i++;

}


Для просмотра строки в обратном порядке можно применить следующий код:


int i = greeting.length - 1;

while (i > 0) {

i--;

if (Character.isSurrogate(greeting.charAt(i))) i--;

int cp = greeting.codePointAt(i);

}


Но проще воспользоваться методом String.codePoints(), формирующий поток значений типа int для отдельных кодовых точек. Полученный поток данных можно преобразовать в массив:


int[] codePoints = str.codePoints().toArray();


Чтобы преобразовать массив кодовых точек в строку, можно воспользоваться конструктором класса String:


String str = new String(codePoints, 0, codePoints.length());

Так же в этом разделе:
 
MyTetra Share v.0.67
Яндекс индекс цитирования