我也说说字符串长度问题

来源:互联网 发布:数禾科技 知乎 编辑:程序博客网 时间:2024/04/30 00:15

背景:

int len = "周华健".length();//3

但是你把这个3个字复制到UE里面,可以看到是6.


对于含有中文的字符串取长度时,仅仅用  “周华健”.length()是不够的,因为编码的不同,导致长度计算会不合要求。

注意:讨论编码时其实有2个地方

1,你的文件本身的编码。你可以在eclipse下查看文件属性,这个编码决定了你写出来内容的真正编码

2,在内存中运行时,运行环境所在的编码格式。比如你可以使用new String("周华健","UTF-8")。


所有在讨论编码或者乱码时,必须先检查文件本身的编码格式,最常见的就是你 新建了个xml格式文件,里面写了明明是UTF-8,但是读取后乱码,这是你就要检查文件本身的编码。然后在读取时进行编码转换。


如果要String类型计算长度是,其实只是返回该对象的count属性,这个属性是final的。就算你更改了这个Stirng对象的编码,也不见得他的长度变化了。有人总喜欢说你使用某种编码格式后再计算长度,这是不对的。

计算长度时  可以用   getBytes()读取长度,字符占1位,中文占2位,UTF-8编码下的中文占3位(常规下占3位,我觉得另有乾坤),这样算出来的是比较合理的。