java中1个char类型的变量可存储任意编码的1个字符
如1个ASC码或1个中文字符,例如:含有3个ASc和含有3个汉字字符的字符窜长度是一样的:“lac”.length()==3;“你好a”.length()=3;但上述两个...
如1个ASC码或1个中文字符,例如:含有3个ASc和含有3个汉字字符的字符窜长度是一样的:
“lac”.length()==3;
“你好a”.length()=3;
但上述两个字符串所占的byte是不一样的,前者是3,后者是5,(1个汉字2byte);
请编写函数:
Public string leftstr(string source,int maxbytelen)
从source里取最大maxByteLen个byte的字串,当最后一个byte恰好为一个汉字的前半个字节时,舍弃此byte 例如:
String str =“888技术服务部999”;
LeftStr(str ,4)==“888”;
LeftStr(str,5)==“888技”
LeftStr(str,6)==“888技”
LeftStr(str,7)==“888技术”
LeftStr(str,10)==“888技术服”
写出程序! 展开
“lac”.length()==3;
“你好a”.length()=3;
但上述两个字符串所占的byte是不一样的,前者是3,后者是5,(1个汉字2byte);
请编写函数:
Public string leftstr(string source,int maxbytelen)
从source里取最大maxByteLen个byte的字串,当最后一个byte恰好为一个汉字的前半个字节时,舍弃此byte 例如:
String str =“888技术服务部999”;
LeftStr(str ,4)==“888”;
LeftStr(str,5)==“888技”
LeftStr(str,6)==“888技”
LeftStr(str,7)==“888技术”
LeftStr(str,10)==“888技术服”
写出程序! 展开
2个回答
2013-06-20
展开全部
java的String类都是采用unicode编码,不论汉字还是英文,都占2个byte
故原文中:
“lac”.length()==3;“你好a”.length()=3;
但上述两个字符串所占的byte是不一样的。。。。。
这句话是不正确的。。。
如果仍然要取maxbytelen位,其实只要判断maxbytelen是奇数还是偶数,是奇数就是取到maxbytelen/2个unicode字符,再判断第maxbytelen/2+1个字符是不是中文
所以maxbytelen = 4时,只能得到str前两个字。maxbytelen = 11时则判断str的第6位是不是中文,决定结果是5位还是6位。
即:
C:\xiaoshuo>java Test1
the res leftstr(str1,2) is: 8
the res leftstr(str1,5) is: 888
the res leftstr(str1,11) is: 888技术
the res leftstr(str1,10) is: 888技术
代码如下:
public class Test1 {
/**
* @param args
*/
public String leftstr(String source, int maxbytelen)
{
int i;
String res;
if(maxbytelen%2 == 1){
i = (maxbytelen-1)/2;
res = source.substring(0,i);
if(source.charAt(i)<0x80){
res = res + source.charAt(i);
}
}
else
{
i = maxbytelen/2;
res = source.substring(0,i);
}
return res;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 ="888技术服务部999";
String str2;
Test1 a = new Test1();
str2 = a.leftstr(str1,2);
System.out.println("the res leftstr(str1,2) is: "+str2);
str2 = a.leftstr(str1,5);
System.out.println("the res leftstr(str1,5) is: "+str2);
str2 = a.leftstr(str1,11);
System.out.println("the res leftstr(str1,11) is: "+str2);
str2 = a.leftstr(str1,10);
System.out.println("the res leftstr(str1,10) is: "+str2);
}
}
故原文中:
“lac”.length()==3;“你好a”.length()=3;
但上述两个字符串所占的byte是不一样的。。。。。
这句话是不正确的。。。
如果仍然要取maxbytelen位,其实只要判断maxbytelen是奇数还是偶数,是奇数就是取到maxbytelen/2个unicode字符,再判断第maxbytelen/2+1个字符是不是中文
所以maxbytelen = 4时,只能得到str前两个字。maxbytelen = 11时则判断str的第6位是不是中文,决定结果是5位还是6位。
即:
C:\xiaoshuo>java Test1
the res leftstr(str1,2) is: 8
the res leftstr(str1,5) is: 888
the res leftstr(str1,11) is: 888技术
the res leftstr(str1,10) is: 888技术
代码如下:
public class Test1 {
/**
* @param args
*/
public String leftstr(String source, int maxbytelen)
{
int i;
String res;
if(maxbytelen%2 == 1){
i = (maxbytelen-1)/2;
res = source.substring(0,i);
if(source.charAt(i)<0x80){
res = res + source.charAt(i);
}
}
else
{
i = maxbytelen/2;
res = source.substring(0,i);
}
return res;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 ="888技术服务部999";
String str2;
Test1 a = new Test1();
str2 = a.leftstr(str1,2);
System.out.println("the res leftstr(str1,2) is: "+str2);
str2 = a.leftstr(str1,5);
System.out.println("the res leftstr(str1,5) is: "+str2);
str2 = a.leftstr(str1,11);
System.out.println("the res leftstr(str1,11) is: "+str2);
str2 = a.leftstr(str1,10);
System.out.println("the res leftstr(str1,10) is: "+str2);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询