我是Java编程的初学者和自学者。
所以,我想知道Java中String.length()
和String.getBytes().length
之间的区别。
什么更适合检查字符串的长度?
答案 0 :(得分:34)
String.length()
是表示字符串所需的16位 UTF-16代码单元的数量。也就是说,它是用于表示字符串的char
值的数量,因此也等于toCharArray().length
。对于西方语言中使用的大多数字符,这通常与字符串中的unicode字符(代码点)的数量相同,但如果使用任何UTF-16 surrogate pairs,它将小于数字代码单元。这样的对只需要编码BMP之外的字符,并且在大多数写作中都是rarely used(表情符号是常见的exception)。
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之间的区别。