我是初学者并正在自学Java编程。
因此,我想了解Java中
哪种方法更适合检查字符串的长度?
String.length()
和String.getBytes().length
之间的区别。哪种方法更适合检查字符串的长度?
String.length()
是表示该字符串所需的16位UTF-16码单元的数量。也就是说,它是用于表示字符串的char
值的数量,因此也等于toCharArray().length
。对于大多数西方语言中使用的字符,这通常与字符串中的unicode字符(代码点)数量相同,但如果使用任何UTF-16 surrogate pairs,则代码点的数量将少于代码单元的数量。这些成对字符仅用于编码BMP之外的字符,在大多数书写中rarely used(表情符号是一个常见exception)。
String.getBytes().length
是用于表示字符串在平台默认编码下所需的字节数。例如,如果默认编码是UTF-16(罕见),则它将恰好是String.length()
返回值的两倍(因为每个16位代码单元需要2个字节来表示)。通常情况下,您的平台编码将是像UTF-8这样的多字节编码。
这意味着这两个长度之间的关系更加复杂。对于ASCII字符串,这两个调用几乎总会产生相同的结果(除了不将ASCII子集编码为1个字节的不寻常默认编码之外)。对于非ASCII字符串,String.getBytes().length
可能会更长,因为它计算表示字符串所需的字节数,而length()
计算2字节代码单元。
通常,您将与其他字符串方法一起使用String.length()
,这些方法采用字符串中的偏移量。例如,要获取最后一个字符,您将使用str.charAt(str.length()-1)
。只有在某种原因下您正在处理由getBytes
返回的字节数组编码时,才会使用getBytes().length
。
length()
方法返回字符串中字符的长度。
一个字符可能会占用多个字节。表达式String.getBytes().length
以平台默认的字符集返回字符串的字节长度。
getLength()
的方法,我想你是指 String.getBytes().length
。 - Bu SaeedString.length()
返回字符串中字符的数量,而 String.getBytes()
.length 返回用指定编码表示字符串中字符所需的字节数。String.length()
的值与 String.getBytes().length
相同。但在像 UTF-8 编码和字符值超过 127 的情况下,String.length()
的值将不同于 String.getBytes().length
。
这里有一个示例,解释了在调用 String.getBytes()
时如何将字符串中的字符转换为字节。这应该让你了解 String.length()
和 String.getBytes().length
之间的区别。String.length()
方法返回字符串中符号的数量。而String.getBytes().length()
则返回用于存储这些符号的字节数量。
通常,字符以UTF-16编码存储。因此,每个字符需要2个字节来存储。
请参考SO answer。
string.length
返回字符串中字符的数量,而string.getBytes().length
返回字符串在存储其值时所使用的字节数。通常情况下,每个字符需要占用 2 个字节来存储 Unicode 值。 - Arun P Johnystring.length
将返回字符串中“Unicode代码单元”的数量。对于ASCII文本,它将计算字符。对于任意Unicode文本,情况会变得有些复杂。请参见BeeOnRope的答案,了解丑陋的细节。 - sleske