#java
Привет всем. В Java у строки есть метод codePointCount. Его можно записать так? String s = "Hello, string!"; System.out.println(String.valueOf(s.codePointCount(0, 5)); System.out.println(String.valueOf(s.substring(0, 5).length()); Зачем вообще считать количество символов если можно просто отнять от второго аргумента первый 5 - 0 = 5 Или я что-то не так понял?
Ответы
Ответ 1
Разница проявится при появлении в строке символов, представимых более чем одним 16-битным блоком (code unit). Так как length возвращает количество 16-битных блоков, а codePointCount - именно символов. Например, эмодзи состоят из пары 16-битных блоков, так как их код в таблице Unicode больше U+FFFF. String s = "😀"; System.out.println(s.length() + " " + s.codePointCount(0, 2)); // 2 1 Соответственно, длина строки s будет 2, но символ в ней только один.Ответ 2
Когда до людей дошло, что для кодирования всех мировых алфавитов одного байта не хватит, возникли многобайтовые кодировки и понятие code point. Code point - это набор байт, описывающих ОДНУ графему(лигатуру) из одного из алфавитов(синтетические языки туда же), существующих на планете земля (смайлики, символы валют, математические символы и т.д. сюда же). Диактрические знаки тоже являются code point кстати. (диактрический знак - это две точки над е в букве ё, например. Пример плохей - знаю, не докапывайтесь) Собственно метод codePointCount возвращает колисество code point'ов, использованных в заданном куске тескта
Комментариев нет:
Отправить комментарий