Чем отличается codePointCount от substring().length()?

226
24 декабря 2017, 09:11

Привет всем. В 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

Или я что-то не так понял?

Answer 1

Разница проявится при появлении в строке символов, представимых более чем одним 16-битным блоком (code unit). Так как length возвращает количество 16-битных блоков, а codePointCount - именно символов.

Например, эмодзи состоят из пары 16-битных блоков, так как их код в таблице Unicode больше U+FFFF.

String s = "        
    
Answer 2

Когда до людей дошло, что для кодирования всех мировых алфавитов одного байта не хватит, возникли многобайтовые кодировки и понятие code point.

Code point - это набор байт, описывающих ОДНУ графему(лигатуру) из одного из алфавитов(синтетические языки туда же), существующих на планете земля (смайлики, символы валют, математические символы и т.д. сюда же).

Диактрические знаки тоже являются code point кстати. (диактрический знак - это две точки над е в букве ё, например. Пример плохей - знаю, не докапывайтесь)

Собственно метод codePointCount возвращает колисество code point'ов, использованных в заданном куске тескта

READ ALSO
не отображаются объекты Graphics2D

не отображаются объекты Graphics2D

Не могу понять, почему в результате выполнения кода не отображается овал, причём при использовании метода paint(Graphics g) овал отображается

207
Не сохраняется сессия tomcat

Не сохраняется сессия tomcat

Один и тот же сайт

248
Конец кода, но не конец консоли

Конец кода, но не конец консоли

Как сделать так, чтобы при запуске консоль не останавливалась после выполнения кода, а продолжала работатьИ пользователь мог вводить в нее...

271
фрагмент не отображает recyclerview

фрагмент не отображает recyclerview

добрый вечер, не могу понять почему во фрагменте не отображается recyclerviewесли надо код скину

243