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

简介:

原题:
写一个方法  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月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构的基本概念;算法的基本概念、特性以及时间复杂度、空间复杂度等举例说明;【含常见的报错问题及其对应的解决方法】
|
6月前
|
Web App开发 自然语言处理
一盏茶的功夫带你掌握烦人的 this 指向问题( 一 )
一盏茶的功夫带你掌握烦人的 this 指向问题( 一 )
|
6月前
|
Web App开发 自然语言处理
一盏茶的功夫带你掌握烦人的 this 指向问题( 二 )
一盏茶的功夫带你掌握烦人的 this 指向问题( 二 )
|
编译器 C语言 C++
重生之我要学C++第四天
重生之我要学C++第四天
105 0
|
数据安全/隐私保护
推荐5个神仙软件,个个让你爱不释手
最近陆陆续续收到好多小伙伴的咨询,这边也是抓紧时间整理出几个好用的软件,希望可以帮到大家。
220 0
和12岁小同志搞创客开发:有意思的激光切割技术
和12岁小同志搞创客开发:有意思的激光切割技术
和12岁小同志搞创客开发:有意思的激光切割技术
|
编解码 搜索推荐
什么叫顶流显示器,外星人今天给我好好上了一课
什么叫顶流显示器,外星人今天给我好好上了一课
422 0
什么叫顶流显示器,外星人今天给我好好上了一课
|
数据采集 传感器 人工智能
拆车、炸机、毁魔方,这个疯狂的算法竞赛少年目的是这样的…
拆车、炸机、毁魔方,这个疯狂的算法竞赛少年目的是这样的…
|
设计模式 算法 架构师
狂补计算机基础知识,让我上了瘾,想要尽快和同龄人拉开差距,必须这么干,才有戏!!!!
狂补计算机基础知识,让我上了瘾,想要尽快和同龄人拉开差距,必须这么干,才有戏!!!!
188 0
|
弹性计算 Cloud Native 算法
“我想要用我余生,换夜空繁星闪耀”
本文是7月28日《一个95后阿里郎的自学修养》文字稿,我们花了一个小时时间,从一阿里郎学生时代的成长经验,聊到了求职时期的tips,最后聊到了工作后的收获,希望与象牙塔里的你一起分享。
2202 0
“我想要用我余生,换夜空繁星闪耀”