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

简介:

原题:
写一个方法  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,如需转载请自行联系原作者
目录
相关文章
|
数据采集 JSON 监控
Kotlin高效App爬取工具:利用HttpClient与代理服务器的技巧
Kotlin高效App爬取工具:利用HttpClient与代理服务器的技巧
|
存储 负载均衡 算法
一致性哈希汇总
本文介绍了多种一致性哈希算法,包括Consistent Hashing Ring、Rendezvous、Jump、Multi-probe、Maglev、Anchor和Dx。这些算法各有特点,如Jump Hash实现了完美的key分布,而DxHash结合了多种算法的优点,支持动态扩缩容。文章还分析了各算法的性能指标,如内存使用、初始化时间、查询时间和调整集群大小的效率,以及均衡性和单调性。最后讨论了副本、权重和负载均衡策略的应用。
561 62
一致性哈希汇总
|
Java API 数据安全/隐私保护
(工作经验)优雅实现接口权限校验控制:基于自定义注解、AOP与@ConditionalOnProperty配置开关的通用解决方案
(工作经验)优雅实现接口权限校验控制:基于自定义注解、AOP与@ConditionalOnProperty配置开关的通用解决方案
508 1
|
11月前
|
JSON 算法 安全
JWT渗透与攻防
JSON Web Token(JWT)作为一种广泛使用的认证机制,因其简单、有效和灵活性而受到开发者的青睐。然而,随着JWT使用的普及,其安全性问题也逐渐显现。本文将探讨JWT的渗透测试方法,分析常见的安全漏洞,并提供相应的防护措施。
477 3
JWT渗透与攻防
|
SQL Oracle 安全
Oracle11g更改数据库名(详细教程)
Oracle11g更改数据库名(详细教程)
578 1
|
前端开发 开发者
深入解析CSS样式表的优先级
深入解析CSS样式表的优先级
323 1
|
JavaScript 前端开发 Java
SpringBoot配置文件 —— 超详细全方位教程
本文是一篇关于SpringBoot配置文件的超详细全方位教程,涵盖了配置文件的作用、SpringBoot中的配置文件格式、优先级、properties和yml配置文件的详解及语法、读取配置文件的方法、转义字符和单双引号的使用、配置对象、集合和Map,以及yml的优缺点。
1710 0
SpringBoot配置文件 —— 超详细全方位教程
|
Web App开发 前端开发 JavaScript
JavaScript Web Full Stack 全栈开发者路线及内容推荐
本文详细介绍了一条全面的JavaScript全栈开发者学习路径,涵盖基础知识、前端和后端开发、数据库与API、MERN Stack与React Native、工程化与部署、安全与测试、未来趋势等方面。推荐了HTML5、CSS3、JavaScript(ES6+)、Node.js、React.js、Vue.js、Svelte、Tailwind CSS、Web Components等关键技术,并提供了丰富的书籍、博主和在线资源。此外,还回顾了JavaScript的历史,并推荐了多个活跃的社区和平台,帮助开发者紧跟技术前沿。
|
机器学习/深度学习 数据可视化 决策智能
Python中使用Gradient Boosting Decision Trees (GBDT)进行特征重要性分析
Python中使用Gradient Boosting Decision Trees (GBDT)进行特征重要性分析
479 0
|
缓存 网络协议 数据安全/隐私保护
ESP8266配网思路(不使用SmartConfig)
ESP8266配网思路(不使用SmartConfig)
609 0