论坛首页 招聘求职论坛

上海华为的一次面试经历

浏览 68191 次
精华帖 (0) :: 良好帖 (1) :: 隐藏帖 (1)
作者 正文
   发表时间:2007-09-10  
 
  1. 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。    
  2.   
  3.   答:代码如下:   
  4.   
  5. package test;    
  6.   
  7. class  SplitString {   
  8.  String SplitStr;   
  9.  int SplitByte;   
  10.  public SplitString(String str,int bytes) {   
  11.   SplitStr=str;   
  12.   SplitByte=bytes;   
  13.   System.out.println("The String is:'"+SplitStr+"';SplitBytes="+SplitByte);   
  14.  }   
  15.   
  16.  public void SplitIt() {   
  17.   int loopCount;   
  18.   loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);   
  19.   System.out.println("Will Split into "+loopCount);   
  20.   for (int i=1;i<=loopCount ;i++ ) {   
  21.    if (i==loopCount){   
  22.     System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));   
  23.    } else {   
  24.     System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));   
  25.    }   
  26.   }   
  27.  }   
  28.   
  29.  public static void main(String[] args) {   
  30.   SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人0ewldfls=103",4);   
  31.   ss.SplitIt();   
  32.  }   
  33. }    
  34.   

 

 java 里有这样的用法吗?j





0 请登录后投票
   发表时间:2007-09-10  
抛出异常的爱 写道
应该 是8 啊?

a
b
c

d
e
f

一个char可以放下一个汉字。。。

是byte,byte应该是10,char确实是8,可能是我操作系统的问题
0 请登录后投票
   发表时间:2007-09-11  
那道截取字符串的题目做的对不对啊?题目要求按字节截取字符串,"我ABC"按4个字节截取出"我AB",截取的字符串总共有4个字节。是我理解错了吗?
0 请登录后投票
   发表时间:2007-09-12  
抛出异常的爱 写道
应该 是8 啊?

a
b
c

d
e
f

一个char可以放下一个汉字。。。


他用的是getBytes(),不是toCharArray(),不应该是8,是10

不知道他的机器运行结果为什么是8。
0 请登录后投票
   发表时间:2007-09-12  
沒有指定編碼          
0 请登录后投票
   发表时间:2007-09-12  
getBytes(),默认就是用项目的编码。他已经说明是"UTF-8"了。不需要指明编码
0 请登录后投票
   发表时间:2007-09-12  
liangwj72 写道
抛出异常的爱 写道
应该 是8 啊?

a
b
c

d
e
f

一个char可以放下一个汉字。。。


他用的是getBytes(),不是toCharArray(),不应该是8,是10

不知道他的机器运行结果为什么是8。


我来解释一下,首先确定是说的getBytes(),以及由此的一些测试
在这个讨论中的字符集有两种情况:
(1).java文件编码的字符集,默认是utf8,所以你可以用中文来命名类或者变量等等。metaphy所说的“代码编码”其实是指的这个,java文件的编码方式,仅此而已。所有语言平台下的这个默认字符集都是utf8,不管中文或者英文平台。
(2)j2se里面encode和decode使用的默认字符集,这个和jdk(jre?os?)有关,比如metaphy说的他是英文os,我猜想他的jdk也是英文的,encode和decode使用的默认字符集就是iso-8859-1(虽然他的java文件编码方式为utf8),在这个字符集里是不会认识中文的,因此getBytes()出来会是8位,中文和英文统一对待,原因就是iso-8859-1是西欧的,不会遇到用中文字符集编码解码。getBytes方法可以有一个字符串的参数,这个参数就是字符集,如果没有参数,那么默认使用平台字符集,在英文os下,有可能就是iso-8859-1了。

如果在中文平台下,由上面提到第2点知道getBytes()调用了中文平台的默认编解码字符集gbk,实际上相当于getBytes("gbk"),关于怎样构造字,一个汉字几位的问题暂不讨论,可以先明确的说gbk一个汉字两位,utf8一个汉字3位,具体原因可以搜索论坛上一个朋友写的东西(名字忘了,sorry),因此在中文平台下getBytes()或者getBytes("gbk")出来后是10位;同理getBytes("utf8")是12位。
希望有所帮助。
0 请登录后投票
   发表时间:2007-09-12  
默認的不是什麽項目編碼  (也可能是俺孤陋了  還真是頭一次聽到)
0 请登录后投票
   发表时间:2007-09-12  
ddandyy 写道
默認的不是什麽項目編碼  (也可能是俺孤陋了  還真是頭一次聽到)

默认是说的什么默认呢?
如果说java文件保存的编码默认,那么是utf8,与语言平台无关
如果说java里面用于encode和decode的编码,比如getBytes(),默认是语言平台默认的,中文平台位gbk,英文平台为iso-8859-1
上面两点一定不要混为一谈了
0 请登录后投票
   发表时间:2007-09-12  
另外在j2ee里面对应的encode和decode又不一样,因为jsr规范的原因,比如servlet容器,要求的默认编码是iso-8859-1,经常看到tomcat乱码等等,就是这里引起的,但另一方面servlet api提供了相应的更改编码的方式,因此这些问题都可以很好解决
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics