牛骨文教育服务平台(让学习变的简单)
博文笔记

JAVA中String.length()中文只算一个字节

创建时间:2014-08-29 投稿人: 浏览次数:2365

     最近在搞APK玩的时候遇到一个问题,java中String.length()函数计算中文字符时只算做一个字符长度,但是在c语言中,当我通过recv函数来读取时,虽然字符长度可能少了,但是居然也能全部读出来,这个还真没搞懂,不过问题的关键不在这,关键是C语言中的strlen()函数计算字符串长度时,由于是utf-8语言环境,中文是占三个字节的。所以长度不一致,导致服务端程序出错。我服务端是通过一个while循环来读取数据的,因为有遇到过数据比较大时,socket通道是分包发送的,一次性读取某个比较大的数据时,会发生丢数据的想象,虽然网上讲(协议接收到的数据可能大于buf的长度,所以 在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据copy完。recv函数仅仅是copy数据,真正的接收数据是协议来完成的),但是我的buf长度足够大,还是会丢失,具体原因也没找到,总之,就多调用几回recv就ok了 。言归正传,解决客户端和服务端计算包含中文字符串长度不一致的问题,我在客户端通过计算字符串中包含的中文字符个数*2+String.length()的方就解决了。  方法网上很多。

public int getChineseNum()

    {
          String regEx = "[\u4e00-\u9fa5]";
          Pattern p = Pattern.compile(regEx);
          Matcher m = p.matcher(s);
          while(m.find())
              count++;
          return count;    
    }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。