Я начинаю и самообучаюсь в программировании на Java.
Итак, я хочу знать о различии между String.length()
и String.getBytes().length
в Java.
Что больше подходит для проверки длины строки?
Я начинаю и самообучаюсь в программировании на Java.
Итак, я хочу знать о различии между String.length()
и String.getBytes().length
в Java.
Что больше подходит для проверки длины строки?
String.length()
- количество кодовых единиц UTF-16, необходимых для представления строки. То есть, это число значений char
, которые используются для представления строки (при этом она равна toCharArray().length
). Для западных языков это обычно совпадает с количеством символов Юникода (кодовых точек) в строке. Значения будут разными в любое время, когда используются UTF-16 суррогатные пары. Такие пары необходимы только для кодирования символов вне BMP и редко используются в большинстве письменная форма.
String.getBytes().length
- количество байтов, необходимых для представления вашей строки в кодировке по умолчанию платформы. Например, если кодировка по умолчанию была UTF-16 (редко), это было бы ровно 2x значение, возвращаемое String.length()
. Чаще всего, ваша кодировка платформы будет многобайтовой кодировкой, такой как UTF-8.
Это означает, что связь между этими двумя длинами сложнее. Для строк ASCII два вызова почти всегда дают одинаковый результат (за пределами необычных кодировок по умолчанию, которые не кодируют подмножество ASCII в 1 байт). Вне строк ASCII String.getBytes().length
, вероятно, будет длиннее, поскольку он подсчитывает байты, необходимые для представления строки, тогда как length()
подсчитывает 2-байтовые кодовые единицы.
Что более подходит?
Обычно вы будете использовать String.length()
совместно с другими строковыми методами, которые принимают смещения в строку. Например, чтобы получить последний символ, вы должны использовать str.charAt(str.length()-1)
. Вы использовали бы только getBytes().length
, если по какой-то причине вы имели дело с кодировкой массива байтов, возвращаемой getBytes
.
Метод length()
возвращает длину строки в символах.
Символы могут принимать более одного байта. Выражение String.getBytes().getLength()
возвращает длину строки в байтах, используя набор символов по умолчанию для платформы.
Метод string.length() возвращает количество символов в строке. В то время как getBytes(). Length() возвращает количество байтов, используемых для хранения этих символов. Обычно символы хранятся в кодировке UTF-16. Поэтому для хранения одного char требуется 2 байта. Проверьте этот ответ SO.
Я надеюсь, что это поможет:)
Короче говоря, String.length() возвращает количество символов в строке, а String.getBytes(). length возвращает количество байтов для представления символов в строке с указанной кодировкой.
Во многих случаях String.length() будет иметь такое же значение, как String.getBytes(). length. Но в таких случаях, как кодирование UTF-8 и символ имеет значение более 127, String.length() не будет таким же, как String.getBytes(). Length. Вот пример, в котором объясняется, как символы в строке преобразуются в байты при вызове String.getBytes(). Это должно дать вам представление о различии между строками String.length() и String.getBytes(). Length.