一个基础题居然难倒了一大片

简介:

原题:
写一个方法  String left(String str ,int n) str字符串中可能包含中文,中文是2bytes,实现的功能是 
如:“中abc12” n=4  则该方法返回“中ab”  “中abc国a” n=6 则返回“中abc”中文是一半时不返回.
--------------------------------------
 
你可以看到在原贴80楼以上,好多人用尽了if 和for循环去做各种各样的判断,甚至还有人用正则去匹配,不得不服。
 
原帖回复:
这个题目其实就是想让大家把字符转换为 gb2312 编码, 
byte[] bytes=s.getBytes("gb2312"); 
这样英文字母和数字占一个字节,汉字占两个字节,比如“中abc12”,转化为 有符号的字节为: 
-42 
-48 
97 
98 
99 
49 
50 
接下来就是把 bytes encode 成 string 的过程,如此思路,大家为什么没有一个人想到? 
有几个程序可以运行,因为你的JVM 碰巧就是用了gb2312.而不是 UTF-8. 万一程序到了国外人家用UTF-16,那就是错误的程序了。 
这个程序应该这样写:
Java code
public  String left(String s, int  a){
        String newString
= null ;
        
try  {
            
byte [] bytes  =  s.getBytes( " gb2312 " );
            
byte [] bytes2  = new   byte [bytes.length];  // 用于新字符串的字节数组
             for  ( int  i = 0 ;i < a;i ++ ) {
                bytes2[i]
= bytes[i];                 // 将左边的字节复制到新的数组中
            }
             newString
= new  String(bytes2, " gb2312 " ); // 生成新的字符串
        }  catch  (UnsupportedEncodingException ex) {
            
// Logger.getLogger(TextTest.class.getName()).log(Level.SEVERE, null, ex);
        }
        
return  newString;
}

如果用c#写: 
C# code
public   string  Left(String a,  int  n) {
      
byte [] stringBytes  =  System.Text.Encoding.GetEncoding( " gb2312 " ).GetBytes(a);
      
char [] chars = new  Char[n];
      Decoder d
= Encoding.GetEncoding( " gb2312 " ).GetDecoder();
      d.GetChars(stringBytes, 
0 , n, chars,  0 );
      
return   new   string (chars);
}



本文转自 xhinkerx 51CTO博客,原文链接:http://blog.51cto.com/xhinker/189149,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
计算机视觉 Python Windows
今天这几张照片在我的朋友圈里炸锅啦!背后的真相令人...
今天这几张照片在我的朋友圈里炸锅啦!背后的真相令人...
41 0
和12岁小同志搞创客开发:有意思的激光切割技术
和12岁小同志搞创客开发:有意思的激光切割技术
和12岁小同志搞创客开发:有意思的激光切割技术
|
编解码 搜索推荐
什么叫顶流显示器,外星人今天给我好好上了一课
什么叫顶流显示器,外星人今天给我好好上了一课
385 0
什么叫顶流显示器,外星人今天给我好好上了一课
|
数据采集 传感器 人工智能
拆车、炸机、毁魔方,这个疯狂的算法竞赛少年目的是这样的…
拆车、炸机、毁魔方,这个疯狂的算法竞赛少年目的是这样的…
拆车、炸机、毁魔方,这个疯狂的算法竞赛少年目的是这样的…
|
设计模式 算法 架构师
狂补计算机基础知识,让我上了瘾,想要尽快和同龄人拉开差距,必须这么干,才有戏!!!!
狂补计算机基础知识,让我上了瘾,想要尽快和同龄人拉开差距,必须这么干,才有戏!!!!
172 0
|
数据中心
阿里云黑科技太厉害了 脑子进水还算得更快
热得快可以快速烧水是利用了浸没的优势,那么如果要降温呢? 阿里云科学家在4月26日的云栖大会·南京峰会上展示了全浸没的“凉得快”服务器——麒麟,把整台服务器浸在液体里循环冷却,这一方案可以无需使用空调,能源使用率(PUE)逼近了理论极限值1.0。
1659 0
|
算法 物联网 大数据
15个未来高科技产品会让你无法想象!这些开脑洞的设计太牛了!
从衣食住行到生活的方方面面,未来必将会有天翻地覆的变化。大数据、云计算、物联网和人工智能这些年的发展,让我们对并不遥远的未来有了更多想象和期待。那些我们现阶段不可企及的所思所想,将在未来成为大部分人的日常。
5254 0