38

我是Java编程的初学者和自学者。所以,我想知道JavaString.length()String.getBytes().lengthJava之间的区别。

什么更适合检查字符串的长度?

4

4 回答 4

48

字符串长度()

String.length()是表示字符串所需的 16 位UTF-16 代码单元的数量。也就是说,它是char用于表示字符串的值的数量,因此也等于toCharArray().length对于西方语言中使用的大多数字符,这通常与字符串中的 unicode 字符(代码点)的数量相同,但如果使用任何 UTF-16代理对,代码点的数量将小于代码单元的数量. 此类对仅用于对BMP之外的字符进行编码,并且在大多数写作中很少使用(表情符号是一个常见的例外)。

String.getBytes().length

String.getBytes().length另一方面是在平台的默认编码中表示您的字符串所需的字节数。例如,如果默认编码是 UTF-16(很少见),那么它将正好是返回值的String.length()2 倍(因为每个 16 位代码单元需要 2 个字节来表示)。更常见的是,您的平台编码将是多字节编码,如 UTF-8。

这意味着这两个长度之间的关系更加复杂。对于 ASCII 字符串,这两个调用几乎总是会产生相同的结果(除了不将 ASCII 子集编码为 1 个字节的异常默认编码之外)。在 ASCII 字符串之外,String.getBytes().length可能更长,因为它计算表示字符串所需的字节数,同时length()计算 2 字节代码单元。

哪个更合适?

通常,您将String.length()与其他将偏移量带入字符串的字符串方法一起使用。例如,要获取最后一个字符,您可以使用str.charAt(str.length()-1). 您只使用getBytes().lengthif 出于某种原因您正在处理由getBytes.

于 2013-04-29T04:08:30.423 回答
9

length()方法以字符为单位返回字符串的长度。

字符可能占用多个字节。该表达式String.getBytes().length使用平台的默认字符集返回字符串的长度(以字节为单位)。

于 2013-04-29T04:05:04.007 回答
2

String.length()方法返回字符串中符号的数量。WhileString.getBytes().length()返回用于存储这些符号的字节数。通常,字符以 UTF-16 编码存储。所以存储一个字符需要 2 个字节。检查这个SO 答案

我希望它会有所帮助:)

于 2013-04-29T04:08:17.813 回答
2

简而言之,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

于 2015-04-14T06:00:55.907 回答