面试题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个
1、原理
我们知道,根据编码的不同,汉字在字符串中所占字节也不一样,如果是UTF-8编码,汉字占3个字节,如果是GBK编码(本文利用的是GBK编码的实现),汉字占2个字节。但是,英文单词在字符串中,始终占用1个字节。所以,把字符串先转化为字符数组和字节数组,然后同时遍历两个数组,比较在数组同位置的值是否相等,如果相等,那么说明该字符是英文字符,如果不相同则说明该字符是中文字符,同时记录下来。大致原理就是这样的,大家看代码实现
2、代码实现
/** * @author Quenice */ public class StringSplit { public static void main(String[] args) throws Exception { System.out.println(split("a好a嗯哦",3)); } public static String split(String str, int byteNum) throws Exception { String ret = null; /* * 转换为字符数组,数组中的元素可能是英文字符,也可能是中文字符 */ char[] charArr = str.toCharArray(); /* * 以GBK编码转换为字节数组,数组元素可能是英文也可能是半个中文, * 如果字符串全部是英文字符的话,那么转换之后的效果其实和转换为字符数组是一个意思 */ byte[] byteArr = str.getBytes("GBK"); //在拆分个数范围(即byteNum)内,计算字节数组中有多少半个汉字 int notCharLen = 0; for(int i = 0;i < byteNum;i ++) { if(i > charArr.length - 1) { notCharLen ++; } else { /* * 比较字符数组和字节数组对应的元素是否相等,不等说明是半个汉字,notCharLen++,相当说明是英文字符,不操作 * charArr[i - notCharLen/2]就是对应于第i个字节 */ if(charArr[i - notCharLen/2] != byteArr[i]) { notCharLen ++; } } } if(notCharLen%2 == 0) {//如果是2的膜,说明正好不用拆封汉字 ret = str.substring(0,byteNum - notCharLen/2); } else {//需要拆封汉字 ret = str.substring(0,byteNum - notCharLen/2 - 1); } return ret; } }
相关推荐
13年(实习期间)飞娱互动有限公司面试游戏开发客户端/服务器端时的面试题的第一道编程题,当时就差这题没做出来,回去后想出来的。 截取一定长度的字符串,保证不把汉字截断。
java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
16. 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半...
84.7. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+...
3、数据库函数:数值处理函数round(四舍五入函数)、turncate(截取函数)、字符处理函数length(字符串/列名)、concat(列名/字符串)、日期时间处理函数curdate、curtime、sysdate、year 4、什么是视图?如何...
angularjs 字符串截取过滤器,用于截取字符串 6年前 大数据ETL 提取、转换 6年前 C# 通过系统剪切板把HTML复制到Word中,并且保留原来的格式 6年前 克罗斯 CROS实现跨域时授权问题 6年前 CrossOrigin_请求 服务器端...
5. 截取字符串, 如果该字符串是“abc我的”,当截取的字节数是3时候就是"abc',如果是4,依然是 abc,也就是说。不能打印出半个汉字 6. 设计4个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1 7. 给你...
1、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC 汉 DEF”,6,应该输出为“我ABC”而不是“我...
本文将介绍Java String类的常见操作和用法,包括字符串的创建、比较、连接、截取、替换等。我们还会讨论字符串与其他数据类型之间的转换、字符串的搜索和分割等常见操作。通过学习本文,您将掌握Java String类的基本...
6、如何实现字符串翻转? 7、优化MYSQL数据库的方法。 8、谈谈事务处理 9、apache+mysql+php实现最大负载的方法 10、实现中文字串截取无乱码的方法。 答案: 1.echo date(‘Y-m-d H:i:s’, strtotime(‘-1 day...
6、如何实现字符串翻转? 7、优化MYSQL数据库的方法。 8、谈谈事务处理 9、apache+mysql+php实现最大负载的方法 10、实现中文字串截取无乱码的方法。 面试题2 var $empty = ”; var $null = NULL; var $bool...
汽水瓶.py,求int型正整数在内存中...字符串反转.py,字符串分割.py,字符串合并处理.py,字符串加密.py,字符串加密2.py,字符串排序.py,字符串运用-密码截取.py,字符串最后一个单词的长度.py,字符个数统计.py,坐标移动.py
定义一个开关用来和控制是否汉字! 控制两个长度!
16. 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半...
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...
辅助软件 aspx/asp代码生成器 语言规范 ... 字符串加密.txt 字幕显示屏幕保护.txt 自己动手用c#写控件.txt C#试题 简答题.txt 填空题.txt 问答题1.txt 问答题2.txt 选择题.txt 综合题.txt
3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...