帮我看看,我看不懂,是一个别人做的面试题!谢谢!

yihanmushui5211314 2009-08-24 05:20:15
**
* 写一个方法 String left(String str ,int n) str字符串中可能包含中文,中文是2bytes,实现的功能是
* 如:“中abc12” n=4 则该方法返回“中ab” “中abc国a” n=6 则返回“中abc”中文是一半时不返回
* @author Fee Share
*/
public class split67L {
public static String left(String str, int index){
char[] c = str.toCharArray();
int in=0;
for(int i=0;i<c.length;i++)
{
if(c[i]>255)
{
in+=2;
}else
{
in++;
}
if(in==index)
{
return(str.substring(0,i+1));
}else if(in>index)
{
return(str.substring(0,i));
}
}
return null;
}


}
我不知道255啥意思?数组c中打印出来不是int型的呀,怎么比较?是不是in只是根据题目的意思,是汉字加2是字母加一,跟自节无关?
...全文
456 26 打赏 收藏 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiubojuncode 2009-08-25
  • 打赏
  • 举报
回复
夸张点说,几乎只要上CSDN就能看到类似这样的帖子.
hotleavegjz 2009-08-25
  • 打赏
  • 举报
回复
因为java采用的是unicode编码, 故不管是英语字母还是汉字, 存储时都会占用两个字节.

所以才会有了程序中的判断.

255之前的是ascii码, 包括英文大小写字母, 数字还有标点符号(半角)以及一些无法显示的特殊字符.
zhuwen9 2009-08-25
  • 打赏
  • 举报
回复
学习了!谢谢
24K純帥 2009-08-25
  • 打赏
  • 举报
回复
英文字母不超过255,一个汉字占二个字节。。
gahyyai 2009-08-25
  • 打赏
  • 举报
回复
mark
tfsict2008 2009-08-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 feishare 的回复:]
java中的字符都是unicode编码的,大于255是中文字符为两个字节
[/Quote]

大于255不一定是中文,中文的unicode码范围0X4E00 -----0X9FA5
Monkey_D_Luffy 2009-08-25
  • 打赏
  • 举报
回复
这些面试题我一个也不会,帮顶一下
zhouxianglh 2009-08-25
  • 打赏
  • 举报
回复
13楼有问题:"你m?"
不能输出半个汉字
lvzejun 2009-08-24
  • 打赏
  • 举报
回复
public class split67L { 
public static String left(String str, int index){
char[] c = str.toCharArray();//将值传递过来的字符串chr转换成字符数组
int in=0; //记录字节数,初始化为0
for(int i=0;i <c.length;i++) //循环字符数组中的元素
{
if(c[i]>255)//判断是否为中文。。中文的asc码大于255,但是中文的时候字节数加2,1个中文两个字节
{
in+=2;
}else
{
in++; //不是中文则加1 这样执行下来。得到的就是总的字节数
}

if(in==index) //当字节数==要求截取的数的时候。说明刚好读完。跳出left方法
{
return(str.substring(0,i+1)); //截取返回0-i之间的字符
}else if(in>index) //读取的时候当读到一个中文字符的时候。。这个时候字节数加2而,而要求的index字节数为in-1;这个时候应该放弃第i个字符的读取.
{
return(str.substring(0,i));//截取返回0-(i-1)之间的字符

}
}
return null;
}


}

class TiaoShi 
{
public static void main(String[] args)
{
split67L a=new split67L();
System.out.println(a.left("中abc国aa国aaaccdd",10));
}
}

fiwiner 2009-08-24
  • 打赏
  • 举报
回复
13楼的方法好
wuxuankaishi 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bigbug9002 的回复:]
unicode小于256的是半角字符.(不应该是是255)

c数组是char类型,char在运算时要转为int类型的,所以int类型的数据能参与的运算,char全可以参与.

汉字占两个字节,半角字符只占一个字节.


[/Quote]
up
xiaozejun 2009-08-24
  • 打赏
  • 举报
回复
java中字符串unicode编码的问题
huachao1 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 viszl 的回复:]
引用 1 楼 bigbug9002 的回复:
unicode小于256的是半角字符.(不应该是是255)

c数组是char类型,char在运算时要转为int类型的,所以int类型的数据能参与的运算,char全可以参与.

汉字占两个字节,半角字符只占一个字节.



java中字符串都是unicode编码,但是unicode是定长编码,半角和全角都是2个字节啊,不甚明白啊
[/Quote]汉字必须是取两个字节才能正常显示,所以遇到char的编码大于255时,表明该字符是汉字,此时根据题目要求要么取两个字符,要么不取。若是英文字符,就可以单独取一个字节,它不影响显示,因为题目就是要求截取自定长度的字节
yof 2009-08-24
  • 打赏
  • 举报
回复
String left(String str ,int n)
{
String s;
byte a[] = s.getBytes("GBK");
return new String(a,0,n,"GBK");
}
zhangpeixv 2009-08-24
  • 打赏
  • 举报
回复
char是两个字节的
如LS说的
char可以和int转换
一个字节是最大是255了
就是说char数组里的最大是两个字节的
小于255的就是一个字节了
也就是大家说的半角和全角了

这是给大家提个醒,以后java传输字符的时候要小心
link_biao 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 viszl 的回复:]
引用 1 楼 bigbug9002 的回复:
unicode小于256的是半角字符.(不应该是是255)

c数组是char类型,char在运算时要转为int类型的,所以int类型的数据能参与的运算,char全可以参与.

汉字占两个字节,半角字符只占一个字节.



java中字符串都是unicode编码,但是unicode是定长编码,半角和全角都是2个字节啊,不甚明白啊
[/Quote]

不管是否定长,一定是一个具体数值,这儿比较的是数的大小,没有涉及它占几个字节。当这个数值>255时,那就是超出Ascii的范围是Unicode了。
loveofmylife 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bigbug9002 的回复:]
unicode小于256的是半角字符.(不应该是是255)

c数组是char类型,char在运算时要转为int类型的,所以int类型的数据能参与的运算,char全可以参与.

汉字占两个字节,半角字符只占一个字节.


[/Quote]
java中字符串都是unicode编码,但是unicode是定长编码,半角和全角都是2个字节啊,不甚明白啊
liufeng_2010 2009-08-24
  • 打赏
  • 举报
回复
java中的字符都是unicode编码的

char在运算时要转为int类型的,所以int类型的数据能参与的运算

char大于255是中文字符为两个字节.注意是两个字节
java1109 2009-08-24
  • 打赏
  • 举报
回复
char和int类型比较的时候会把两者都转化成int
然后再来比较
knightzhuwei 2009-08-24
  • 打赏
  • 举报
回复
话说这题题目我一连几个月没看懂
加载更多回复(6)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧