黑马程序员技术交流社区
标题:
关于字节读取的问题
[打印本页]
作者:
罗胜华
时间:
2013-3-27 12:18
标题:
关于字节读取的问题
public class Test {
/**
*
*/
public static void main(String[] args) {
String s = "abc中国";
//这时候abc中国是7个字节,如果我想读取6个字节,怎么保证它的完整度
byte[] bytes = s.getBytes();
getString(bytes,6);
}
public static String getString(byte[] b,int len) {
int count = 0;
String s =null;
//汉字在内存中是负数的形式,所以找出负数的个数
for(int i = 0; i<b.length; i++) {
if(b[i]<0){
count ++;
}
}
if(count%2==0) {
s = new String(b,0,len);
}else{
len--;
}
return s;
}
}
为什么结果得不到正确的答案?
作者:
张豪杰
时间:
2013-3-27 12:34
if(count%2==0) {
s = new String(b,0,len);
}else{
len--;
}
抽取你代码中有问题的一部分
你上面那段代码是说,如果没有半个汉字存在,即count%2==0为true时,执行 s = new String(b,0,len);这里没错,这样判断很巧妙
但是你的else那部分代码,如果存在半个汉字,len自减,自减后呢?是不是应该生成个字符串啊?你就让编译器把截取长度减1,没有让编译器照这个长度去重新截取一个字符串-。-这能正确的话,只能说jvm太智能了
else部分的代码加改成下面那样试试?
else{
len--;
s = new String(b,0,len);
}
或许这样可以-。-我没运行过
作者:
黑马潘浩
时间:
2013-3-27 12:36
首先不知道你预想的答案是什么?然后你整个程序没有一个打印语句怎么看到的结果?最后我在打印了一下 System.out.println(getString(bytes,6));,打印结果为:abc中?。。我觉得的这个结果也是对的,因为中国的国字由两个字节组成,你只获取了一个字节就打印了,也应该是个?符号。
作者:
VOIDMAIN
时间:
2013-3-29 22:43
此题最关键就是判断是不是汉字,如果是汉字的话,就在截取的时候增加或者减少一个字节(根据题目要求,保全汉字),汉字有一个正则表达式,在API中可以查,
按你这种思路,即先获取汉字的字节,也是可以的,但是你要注意,一个汉字是以两个负数来表示的。只要这些原则了,我想还是能搞定的了,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2