Страницы

Поиск по вопросам

понедельник, 22 октября 2018 г.

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

Привет всем. В 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
Или я что-то не так понял?


Ответ

Разница проявится при появлении в строке символов, представимых более чем одним 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, но символ в ней только один.

Комментариев нет:

Отправить комментарий