关于java的String

最近在更新《轻松编辑》《IP摄像头》的网页服务器部分时,遇到了两个String的问题。

第一个是获取String占用的内存字节数,自己想当然直接用length()函数取得了长度了,可到了socket发送数据的时候总是发送不完整(字符串中包含中文),后面Debug之后才发现length得到的是字符数,而不是内存中的字节数,一个中文在UTF8编码下要占用3个字节,自然得到的长度变短了,所以发送不完整。正确做法是getBytes(),再在返回的数组中取length。

第二个是截取String指定区间的子字符串,函数substring (int start, int end)。比如要取索引2到5这4个字符,直接substring (2, 5)……然后得到的是索引2到4三个字符组成的字符串,索引5的那个字符并没有出现,后面查了一下谷歌,才发现substring (int start, int end)返回的字符串不包含索引end的字符!!!所以正确的应该是substring (2, 6)。

发现了这两个特别注意的地方,就是不知道先前的代码有没出现过这两个错误。