Indexof () тип аргумента - PullRequest
       33

Indexof () тип аргумента

0 голосов
/ 10 октября 2019

Пример 1: indexOf (int ch) // ex: s.indexOf ('y');Пример 2: replace (char оригинал, замена символа)

В обоих примерах аргумент ожидает тип char. Хотя это упоминается как int в примере 1, в конце он ожидает аргумент с одинарной кавычкой, которая является символом. Это могло бы быть прямо как char ch. Почему существует тип int? Они могли бы указать это так же, как в примере 2.

Есть ли какая-либо внутренняя причина для этого. Почему в некоторых случаях синтаксис отличается. Там должна быть причина для этого. Пожалуйста, объясните мне это ...

1 Ответ

0 голосов
/ 10 октября 2019

Необходимо понимать разницу между char типом данных и кодовой точкой символа.

char - это просто 16-разрядное значение без знака. Но кодовая точка - это число, представляющее один символ Юникода. Кодовые точки кодируются с использованием кодирования UTF-16 , они могут быть представлены одним или двумя (так называемая суррогатная пара ) 16-битными значениями. Строки в Java используют эту кодировку, поэтому каждый символ может быть представлен одним или двумя значениями char.

В подавляющем большинстве случаев кодовые точки используют только один char, значение которого равно кодовой точке,поэтому многие программисты просто игнорируют разницу. Но метод indexOf понимает это, и если указано число больше 0xFFFF, и это допустимая кодовая точка, то метод будет искать последовательность из двух суррогатных значений.

Обратите внимание, что результат метода, так как все смещения в строках и .length() находятся в chars, а не в реальных кодовых точках. Но, как упоминалось выше, в большинстве случаев вы можете просто игнорировать разницу.

См. indexOf документация

...