Spec-Zone .ru
спецификации, руководства, описания, API
|
Чтобы записать код, который работает легко на любой язык, используя любой сценарий, есть несколько вещей иметь в виду.
Рассмотрение | Причина |
---|---|
Избегите методов, которые используют char тип данных. |
Избегайте использования char примитивный тип данных или методы, которые используют char тип данных, потому что код, который использует тот тип данных, не работает на дополнительные символы. Для методов, которые берут a char введите параметр, используйте соответствие int метод, где доступный. Например, используйте Character.isDigit(int) метод, а не Character.isDigit(char) метод. |
Используйте isValidCodePoint метод, чтобы проверить значения кодовой точки. |
Кодовая точка определяется как int тип данных, который учитывает значения за пределами допустимого диапазона значений кодовой точки от 0x0000 до 0x10FFFF. По причинам производительности методы, которые принимают значение кодовой точки в качестве параметра, не проверяют законность параметра, но можно использовать isValidCodePoint метод, чтобы проверить значение. |
Используйте codePointCount метод, чтобы считать символы. |
String.length() метод возвращает число элементов кода, или 16-разрядный char значения, в строке. Если строка содержит дополнительные символы, количество может вводить в заблуждение, потому что это не будет отражать истинное число кодовых точек. Чтобы получить точное количество числа символов (включая дополнительные символы), используйте codePointCount метод. |
Используйте String.toUpperCase(int codePoint) и String.toLowerCase(int codePoint) методы, а не Character.toUpperCase(int codePoint) или Character.toLowerCase(int codePoint) методы. |
В то время как Character.toUpperCase(int) и Character.toLowerCase(int) методы действительно работают со значениями кодовой точки, есть некоторые символы, которые не могут быть преобразованы на непосредственной основе. Строчный немецкий символ ß, например, становится двумя символами, SS, когда преобразовано в верхний регистр. Аналогично, маленький греческий символ Сигмы отличается в зависимости от позиции в строке. Character.toUpperCase(int) и Character.toLowerCase(int) методы не могут обработать эти типы случаев; однако, String.toUpperCase и String.toLowerCase методы обрабатывают эти случаи правильно. |
Будьте осторожны, удаляя символы. | Вызывая StringBuilder.deleteCharAt(int index) или StringBuffer.deleteCharAt(int index) методы, где индексировать точки к дополнительному символу, только первая половина того символа (первое char значение), удаляется. Во-первых, вызовите Character.charCount метод на символе, чтобы определить, если один или два char значения должны быть удалены. |
Будьте осторожны, инвертируя символы в последовательности. | Вызывая StringBuffer.reverse() или StringBuilder.reverse() методы на тексте, который содержит дополнительные символы, высокие и низкие суррогатные пары, инвертируются, который приводит к неправильному и возможно недопустимым суррогатным парам. |