JAVA处理字符串时,一个汉字算一个字符,这时处理中英文混合的字符串时就遇到了麻烦。
现在要从服务器接收字符串,是中英文都有的,收到后,往里面相应的地方插入分隔符,然后再发给其他客户端,具体是这样的,收到的字符串格式为
书名                作者      出版社                        000000金额
|-------20字节-----|--10字节-|---------30字节--------------|--10字节-|
现在收到该字符串后,要在书名、作者、出版社我金额后插入一个分隔符"|",如果中文按两个字节算的话,那么我只要数前20个字节那就是书名,插入一个分隔符,再数10个字节,就是作者,插入一个分隔符....
但现在Java一个汉字算一个字符,那么我用insert插入就会出问题。
假如字符串是这样的
Delphi5实务经典     林金霖    中国铁道出版社                0000007800
Java自学教程        叶至军    人民邮电出版社                0000004800
如果我用Str.insert(20, "|")插入,那就不会得到
Delphi5实务经典     |林金霖    |中国铁道出版社                |0000007800
Java自学教程        |叶至军    |人民邮电出版社                |0000004800
的格式。
我实在是没有一点办法了。

解决方案 »

  1.   

    似乎用Charater的一些函数可以做到,比如isLetterOrDigit(char c),这样可以判断你读取的每一个字符是不是字母或数字,如果是的话,长度按1算,如果不是(那可能就是汉字),长度按2算。这样,插入“|”就比较简单了。当然,除了字母、数字之外不全是汉字,你可以稍微研究一下Charater类的这些函数,相信对你有用的。
      

  2.   

    把空格换位|不是更好吗?
    String test = "Java自学教程        叶至军    人民邮电出版社                0000004800";
    String qq = test.replaceAll("\\s+", "|");
    System.out.println(qq);
      

  3.   

    运行下面的程序看看结果
    package first;public class ChaneseEnglish {
    public static void main(String[] args) {
    StringBuffer str=new StringBuffer("中文AND英文");
    System.out.println("length:"+str.length());
    str.insert(2, "&");
    System.out.println(str);
    str.insert(6, "&");
    System.out.println(str);
    }
    }另外提醒你一下,java中汉字在存储是占两个字节,但在计算字符串的长度时一个汉字只占一个长度,比如:StringBuffer str=new StringBuffer("你好Tom");str.langth()=5
      

  4.   

    正则替换空格是比较好的方法。
    String.replaceAll("\\s+","|");也可以用正则查找汉字,它是unicode码,汉字有个范围的。
      

  5.   

    一般来说用空格不是很好的主意
    服务器上输出的内容里面,可能某个字段里面就有空格
    这样用replace来替换就会出错通常这种定长输出的内容
    建议用InputStream读到byte[]里面
    然后根据长度new String
    然后加上分隔符就好了
      

  6.   

    String str = "中国人料理中国人    中国人料 中国人料理中国人料理中国人料理 中国人料理";
    byte[] bt = str.getBytes();
    String strName = new String(bt,0,20) + "|"
    + new String(bt,20,10) + "|"
    + new String(bt,30,30) + "|"
    + new String(bt,60,10) + "|";
    System.out.println(strName);
      

  7.   

    用楼上hudingchen(努力不一定成功,放弃一定失败。)的方法写了一个函数,好使,呵呵    public String InsertChar(String s, char c, int i){
            byte[] b = s.getBytes();
            String r = new String(b, 0, i) + c + new String(b, i, b.length-i);
            return r;
        }多谢各位的帮助。^_^