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

简介:

原题:
写一个方法  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,如需转载请自行联系原作者
目录
相关文章
|
数据安全/隐私保护
推荐5个神仙软件,个个让你爱不释手
最近陆陆续续收到好多小伙伴的咨询,这边也是抓紧时间整理出几个好用的软件,希望可以帮到大家。
156 0
|
JavaScript Java API
@Value竟然能玩出这么多花样
@Value竟然能玩出这么多花样
@Value竟然能玩出这么多花样
和12岁小同志搞创客开发:有意思的激光切割技术
和12岁小同志搞创客开发:有意思的激光切割技术
和12岁小同志搞创客开发:有意思的激光切割技术
|
数据采集 传感器 人工智能
拆车、炸机、毁魔方,这个疯狂的算法竞赛少年目的是这样的…
拆车、炸机、毁魔方,这个疯狂的算法竞赛少年目的是这样的…
拆车、炸机、毁魔方,这个疯狂的算法竞赛少年目的是这样的…
|
算法 物联网 大数据
15个未来高科技产品会让你无法想象!这些开脑洞的设计太牛了!
从衣食住行到生活的方方面面,未来必将会有天翻地覆的变化。大数据、云计算、物联网和人工智能这些年的发展,让我们对并不遥远的未来有了更多想象和期待。那些我们现阶段不可企及的所思所想,将在未来成为大部分人的日常。
5174 0
|
机器学习/深度学习 vr&ar
看球,我选上帝视角
4:3,梅西回家了;2:1,C罗也回家了,这届世界杯真是激烈又精彩。但对于无法前往现场的(伪)球迷们,只能屈身于手机、电视的平面看直播了吧? 在新技术应用一个接一个的今天,到底有没有更新、更技术的方式,重新定义一下看个球?
1441 0