我是一个自学Java编程的初学者。所以,我想知道String.length()
和String.getBytes().length
在Java中的区别。
哪种方法更适合检查字符串的长度?
发布于 2013-04-29 12:08:30
String.length()
String.length()
是表示字符串所需的16位UTF-16代码单元的数量。也就是说,它是用于表示字符串的char
值的数量,因此也等于toCharArray().length
。对于西方语言中使用的大多数字符,这通常与字符串中的unicode字符(代码点)的数量相同,但如果使用任何UTF-16 surrogate pairs,则代码点的数量将少于代码单元的数量。这样的对只在对BMP之外的字符进行编码时才需要,并且在大多数书写中都是表情( rarely used是常见的exception)。
String.getBytes().length
另一方面,String.getBytes().length
是以平台的默认编码表示字符串所需的字节数。例如,如果默认编码是UTF-16 (rare),那么它将恰好是String.length()
返回值的2倍(因为每个16位代码单元需要2个字节来表示)。更常见的是,您的平台编码将是像UTF-8这样的多字节编码。
这意味着这两个长度之间的关系更加复杂。对于ASCII字符串,这两个调用几乎总是产生相同的结果(除了不以1字节编码ASCII子集的不寻常的默认编码之外)。在ASCII字符串之外,String.getBytes().length
可能更长,因为它计算表示字符串所需的字节,而length()
计算2字节的代码单元。
哪一个更合适?
通常,您会将String.length()
与其他接受字符串偏移量的字符串方法结合使用。例如,要获取最后一个字符,您可以使用str.charAt(str.length()-1)
。只有在处理getBytes
返回的字节数组编码时,才会使用getBytes().length
。
发布于 2013-04-29 12:05:04
length()
方法以字符为单位返回字符串的长度。
字符可能会占用超过一个字节。表达式String.getBytes().length
使用平台的缺省字符集返回以字节为单位的字符串长度。
发布于 2013-04-29 12:08:18
String.length()
方法返回字符串中的符号数量。而String.getBytes().length()
返回用于存储这些符号的字节数。通常,字符以UTF-16编码存储。因此,存储一个字符需要2个字节。查看此SO answer。
我希望它能有所帮助:)
https://stackoverflow.com/questions/16270994
复制相似问题