JAVA处理字符串时,一个汉字算一个字符,这时处理中英文混合的字符串时就遇到了麻烦。
现在要从服务器接收字符串,是中英文都有的,收到后,往里面相应的地方插入分隔符,然后再发给其他客户端,具体是这样的,收到的字符串格式为
书名 作者 出版社 000000金额
|-------20字节-----|--10字节-|---------30字节--------------|--10字节-|
现在收到该字符串后,要在书名、作者、出版社我金额后插入一个分隔符"|",如果中文按两个字节算的话,那么我只要数前20个字节那就是书名,插入一个分隔符,再数10个字节,就是作者,插入一个分隔符....
但现在Java一个汉字算一个字符,那么我用insert插入就会出问题。
假如字符串是这样的
Delphi5实务经典 林金霖 中国铁道出版社 0000007800
Java自学教程 叶至军 人民邮电出版社 0000004800
如果我用Str.insert(20, "|")插入,那就不会得到
Delphi5实务经典 |林金霖 |中国铁道出版社 |0000007800
Java自学教程 |叶至军 |人民邮电出版社 |0000004800
的格式。
我实在是没有一点办法了。
现在要从服务器接收字符串,是中英文都有的,收到后,往里面相应的地方插入分隔符,然后再发给其他客户端,具体是这样的,收到的字符串格式为
书名 作者 出版社 000000金额
|-------20字节-----|--10字节-|---------30字节--------------|--10字节-|
现在收到该字符串后,要在书名、作者、出版社我金额后插入一个分隔符"|",如果中文按两个字节算的话,那么我只要数前20个字节那就是书名,插入一个分隔符,再数10个字节,就是作者,插入一个分隔符....
但现在Java一个汉字算一个字符,那么我用insert插入就会出问题。
假如字符串是这样的
Delphi5实务经典 林金霖 中国铁道出版社 0000007800
Java自学教程 叶至军 人民邮电出版社 0000004800
如果我用Str.insert(20, "|")插入,那就不会得到
Delphi5实务经典 |林金霖 |中国铁道出版社 |0000007800
Java自学教程 |叶至军 |人民邮电出版社 |0000004800
的格式。
我实在是没有一点办法了。
String test = "Java自学教程 叶至军 人民邮电出版社 0000004800";
String qq = test.replaceAll("\\s+", "|");
System.out.println(qq);
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
String.replaceAll("\\s+","|");也可以用正则查找汉字,它是unicode码,汉字有个范围的。
服务器上输出的内容里面,可能某个字段里面就有空格
这样用replace来替换就会出错通常这种定长输出的内容
建议用InputStream读到byte[]里面
然后根据长度new String
然后加上分隔符就好了
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);
byte[] b = s.getBytes();
String r = new String(b, 0, i) + c + new String(b, i, b.length-i);
return r;
}多谢各位的帮助。^_^