站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题简单问题 急 在线等

简单问题 急 在线等

摘要: 简单问题 急 在线等


请问各位大虾
java里的汉字应该怎么才占一个字节呢?比如:"交易成功"才算4位吗?如何让他算8位呢?多谢了


一个汉字是两个字节


JAVA中使用unicode编码,unicode里每个字符都占两个字节


但是为什么会出先如下问题:

String a="交易成功0009"
String b=a.substring(0,4)
得出来的结果
b="交易成功0009"



我是从unix接收到的数据,应该转换一下编码吗?


不好意思,上面写错了
String a="交易成功0009"
String b=a.substring(0,8)
得出来的结果
b="交易成功0009"
而正确的是想要 b="交易成功"


substring是按字符个数来截取的,不是按字节截取的


那么我如何才能实现上面我说的呢,谢谢了


"交易成功"是八个字节
一个汉字俩个字节,如果想变为一个字节,改虚拟机


String a="交易成功0009";
String b=a.substring(0,4);


可是我不能改成String b=a.substring(0,4);
因为8是我从数据包里取出来的,完整的包是这样的"0008交易成功0009jfdkf",我先取出0008知道要取的数据位数是8,然后再取,所以就出现这个问题了


/**
* 按字节长度截取字符串
* @param str 将要截取的字符串参数
* @param toCount 截取的字节长度
* @param more 字符串末尾补上的字符串
* @return 返回截取后的字符串
*/
public static String substring(String str, int toCount, String more) {
int reInt = 0;
String reStr = "";
if (str == null)
return "";
char[] tempChar = str.toCharArray();
for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {
String s1 = str.valueOf(tempChar[kk]);
byte[] b = s1.getBytes();
reInt += b.length;
reStr += tempChar[kk];
}
if (toCount == reInt || (toCount == reInt - 1))
reStr += more;
return reStr;
}


已经解决了,多谢大家



哎~~~~昨晚一喝酒~~~~~~~就迟了一步~~~~


↑返回目录
前一篇: 新手求教一个简单问题
后一篇: 为什么每次进DOS,classpath就要重新设定?