Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java SE 综合讨论区 » 编程/算法/API  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 字节数组转化为String字符串随机截取的方法?
GlennLi





发贴: 20
积分: 2
于 2005-09-07 14:58 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
比如我有一个字符串 str="123abc中文显示",我现在获取str的字节数组
byte[] b=str.getBytes(),然后我要实现一个方法:
String Convert(byte[] b,int offset,int length ) {
//实现将byte[]类型转换为String类型
}

三个参数中,第一个是要转化的字节数组,第二个是开始的位移量,第三个是要转化的字节数。这个方法的功能就是要把字节数组b还原为str,如果offset=0,length=b.length,返回值会正常显示。但是,如果我随机设置offset和length的长度,问题就出现了:
比如 System.out.println(Convert(b,0,7)); 结果是 123abc?
出现问号的原因是"中"字占了两个字节,而length=7刚好读到"中"的第一个字节,因此无法正常显示。
如果使用substring方法,那么所有的字符都是按双字节输出,那么
System.out.println(Convert(b,0,8)); 结果是123abc中文
读取字节的长度length=8还没有度到"文"的字节的时候,"文"就已经读出来了,这样不是想要的结果,因为参数length是字节的长度。
请教怎么样才能在我随机设置offset和length的情况下,单字节和双字节混合都能正常显示,如果恰好读到一个双字节的第一个字节的时候,那么就不要显示这个双字节了,也就是不要出现问号,请问该怎么实现?


GlennLi edited on 2005-09-07 15:01

作者 Re:字节数组转化为String字符串随机截取的方法? [Re:GlennLi]
GlennLi





发贴: 20
积分: 2
于 2005-09-08 09:38 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
怎么没有人回复啊??
这个问题很棘手啊!!!!



作者 Re:字节数组转化为String字符串随机截取的方法? [Re:GlennLi]
why

問題兒童

总版主


发贴: 4629
积分: 388
于 2005-09-08 10:04 user profilesend a private message to usersend email to whysearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
> 怎么没有人回复
It's less than a day... and as you said : 这个问题很棘手 Smile

I don't have experience with double-byte characters, but I guess the first (hi) byte of a double-byte character would be certain range of values other than those of regular alpha-numeric characters (and punctuation marks as well).

(Frankly I won't reply if you haven't sent me a PM.)


why edited on 2005-09-08 10:12

作者 Re:字节数组转化为String字符串随机截取的方法? [Re:GlennLi]
GlennLi





发贴: 20
积分: 2
于 2005-09-08 11:10 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
谢谢你的回复,目前我解决了一部分,基本上可以实现了
主要就是添加一个对双字节和单字节的判断,然后就可以对length变量进行设定了



作者 Re:字节数组转化为String字符串随机截取的方法? [Re:GlennLi]
zcjl

涅槃



发贴: 537
积分: 65
于 2005-09-08 11:41 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
曾经写过类似的程序,不过不在公司的开发机上
等我回家看看能否找到



作者 Re:字节数组转化为String字符串随机截取的方法? [Re:GlennLi]
GlennLi





发贴: 20
积分: 2
于 2005-09-08 18:29 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
唉,还是有问题,无法读取传入位移和长度的字节,虽然已经没有乱码了!
谁来救救我!



作者 Re:字节数组转化为String字符串随机截取的方法? [Re:GlennLi]
zcjl

涅槃



发贴: 537
积分: 65
于 2005-09-08 22:11 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list


/**
* 以byte为单位截取定长的String,用于显示的美观,超过定长部分用..代替
* @param String str 将被截取的源字符串
* @param int byteLength 以byte为单位的字符串长度
* @param boolean isFillNeeded 源字符串长度不够时,是否需要填充空格
*/
public static String truncateString(String str, int byteLength, boolean isFillNeeded) {
try {
if (str.getBytes().length < byteLength) {
if (isFillNeeded) {
int spaceNeeded = byteLength - str.getBytes().length;
StringBuffer sb = new StringBuffer(byteLength);
sb.append(str);
for (int i = 0; i < spaceNeeded; i++) {
sb.append(" ");
}
return sb.toString();
} else {
return str;
}
} else {
while (str.getBytes().length > (byteLength - 2)) {
str = str.substring(0, str.length() - 1);
}

int spaceNeeded = byteLength - 2 - str.getBytes().length;
StringBuffer sb = new StringBuffer(byteLength);
sb.append(str).append("..");
for (int i = 0; i < spaceNeeded; i++) {
sb.append(" ");
}
return sb.toString();
}
} catch (Exception e) {
e.printStackTrace();
return "";
}
}

这是我以前写的一个关于截断字符串的方法,不知道对你是否有用?



作者 Re:字节数组转化为String字符串随机截取的方法? [Re:GlennLi]
GlennLi





发贴: 20
积分: 2
于 2005-09-09 09:58 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
谢谢楼上这么热心,我试了你的方法,是可行的。
但是,那是输出从字符串开头到指定字节长度byteLength的子字符串。
如果我的起始位置不是开头就有问题,因为我要实现的方法里面有一个offset参数就是来告诉从哪个起始位置开始读byteLength长度的子字符串,如果我开始就读的是双字节的一个字节就会出问题。我试着从你的方法中加入offset,但是不行,因为你是根据byteLength和str.length()的比较来判断是否读到双字节的其中一个字节,如果我随机加入一个offset,这个判断就没有意义了,不知道我这样想对不对?再次谢谢楼上这么热心!如果你想出我的问题的解决办法,麻烦你告诉我,我这两天要交任务了,崩溃中...




flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923