String.length()和String.getBytes()之间的区别。长度

时间:2013-04-29 04:00:19

标签: java string

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

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

4 个答案:

答案 0 :(得分:34)

string.length减()

String.length()是表示字符串所需的16位 UTF-16代码单元的数量。也就是说,它是用于表示字符串的char值的数量,因此也等于toCharArray().length。对于西方语言中使用的大多数字符,这通常与字符串中的unicode字符(代码点)的数量相同,但如果使用任何UTF-16 surrogate pairs,它将小于数字代码单元。这样的对只需要编码BMP之外的字符,并且在大多数写作中都是rarely used(表情符号是常见的exception)。

String.getBytes()。长度

另一方面,

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

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

哪个更合适?

通常,您将String.length()与其他字符串方法一起使用,这些方法将偏移量转换为字符串。例如,要获得最后一个字符,您可以使用str.charAt(str.length()-1)。如果由于某种原因你正在处理getBytes().length返回的字节数组编码,你只能使用getBytes

答案 1 :(得分:7)

length()方法以字符形式返回字符串的长度。

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

答案 2 :(得分:2)

string.length()方法返回string中的符号数量。而getBytes()。length()返回用于存储这些符号的字节数。 通常,字符以UTF-16编码存储。因此存储一个char需要2个字节。 请查看此SO answer

我希望它会有所帮助:)

答案 3 :(得分:0)

简而言之,String.length()返回字符串中的字符数,而String.getBytes()。length返回表示具有指定编码的字符串中字符的字节数。

在许多情况下,String.length()将具有与String.getBytes()。length相同的值。但是在编码UTF-8且字符值大于127的情况下,String.length()将与String.getBytes()。length不同。 这是an example,它解释了在调用String.getBytes()时字符串中的字符如何转换为字节。这应该让您了解String.length()和String.getBytes()。length之间的区别。