Привет всем. В 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, но символ в ней только один.
Комментариев нет:
Отправить комментарий