要求:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”String.substring(int,int)方法只能按规定int输出子字符串,如果遇到汉字的话,该如何判断它占两个字节呢?
解决方案 »
- 请教 hashmap 转 set 的一个问题。
- Java代码执行时内存分析--高手请进
- [IO流]读写并发的时候,如何避免读到不完整记录
- 求助关于ComponentAdapter的componentResized方法
- 很简单的问题,20分意思哈
- 关于GUI的Thread问题
- sun.net.ftp.* 无法使用(大侠请进,顿首拜谢)
- 构造函数中对对象数组初始化
- 金山词霸能在jb6下用么?看坛子上几为兄弟说可以,可是我在jb5下,词霸还是取不了词么,而且词霸2002的网站上也没什么补丁,就因为这个我后来才把jb5又给del了,各位能不能和我说词霸怎么在jb下取词,能取词的,你们的系统是什么?
- 推荐几本java的好书?
- 关于Swing中用按钮做超链接
- 【请问】市面上有什么好书是来介绍在linux下面开发java程序的吗
substring是按照char来取的,不是按照byte来取的
"哈哈",byte是4个,但char是2个不会出现你说的问题
String name = "lasdjflasdf阿里所困地方军阿里缩短1";
int len = 0;
String s = "";
for (int i = 0; i < name.length(); i++) {
if (name.charAt(i) > 256) {
len += 2;
s += name.substring(i, i + 1);
} else {
len += 1;
s += name.substring(i, i + 1);
}
if (len >= (maxLen * 2 - 3)) {
s += "..."; //截取的
break;
}
}
如果对byte进行操作,要考虑编码和char的问题
但对于substring来说不用,因为这个方法是根据char来转换的,实际上是从第n个char到第m个char之间的全部拿出来创建新的String,而char不会将中文截断。