JAVA面试题_根据字节数截取字符串,但是汉字不能截取半个。
来源:互联网 发布:数据库考点总结 编辑:程序博客网 时间:2024/05/17 03:32
深圳阳光人寿JAVA开发岗位,笔试最后一道编程题。
JAVA面试题题目:
截取字符串指定指定字节数的内容,如果指定的字节数在汉字的中间,汉字不能截取部分,只截取前面的内容。
<pre name="code" class="java">package com.lcx.test;import java.io.UnsupportedEncodingException;/** * * 面试题: 截取字符串指定指定字节数的内容,如果指定的字节数在汉字的中间,汉字不能截取部分,只截取前面的内容。 如"ab我",截取3个字节的字符,如果采用非iso-8859-1编码 汉字所占字符超过1个字节,所以此时只能截取"ab" 。 题目意思: 应该是字符串中不存在乱码的情况下,如果编码形式是iso-8859-1,那么截取字符串就是截取的字节格式, 所以主要考核的是非iso-8859-1编码格式是如何截取。 思路: 假设截取 n个字节, 截取字符串的n个字符,n个字符的GBK编码的字节数一定>=要截取字节个数,如果等于说明全是字母 如果不等,说明包含汉字,截取的n个字符的字节数>需要截取的n个字节,故截取字符n-1, 再次进行比较,直到,字节数n和截取字符串的字节数相等,那么所截取的字符串就是结果。 * @author qq1013985957 * */public class SubStringByBytes {/** * @param args * @throws UnsupportedEncodingException */public static void main(String[] args) throws UnsupportedEncodingException {String en = "a";String cn = "我";System.out.println("英文_ISO-8859-1:" + en.getBytes("ISO-8859-1").length);System.out.println("汉字_ISO-8859-1:" + cn.getBytes("ISO-8859-1").length);System.out.println("英文_GBK:" + en.getBytes("GBK").length);System.out.println("汉字_GBK:" + cn.getBytes("GBK").length);System.out.println("英文_UTF-8:" + en.getBytes("UTF-8").length);System.out.println("汉字_UTF-8:" + cn.getBytes("UTF-8").length);String str = "abc我们啊ddd";/* * 这里还和截取何种编码的字节数有关,如果截取9个字节 * GBK 是 abc我们啊 * UTF8是 abc我们 */System.out.println(subStringByBytes(str, 9,"gbk"));System.out.println(subStringByBytes(str, 9,"utf-8"));}/** * * @param str 要截取的字符串 * @param bytes 截取的字节数 * @return * @throws UnsupportedEncodingException */public static String subStringByBytes(String str, int bytes,String charSetName) throws UnsupportedEncodingException {String subAfter = str.substring(0, bytes);int temp = bytes;try {//直到截取的字符串的字节数 和 需要的 截取的字节数相等位为止while(bytes < subAfter.getBytes(charSetName).length){subAfter = subAfter.substring(0,--temp );}} catch (UnsupportedEncodingException e) {e.printStackTrace();}return subAfter;}/** * * @return 当前系统的编码格式 */public static String getSystemEncode() {System.getProperties().list(System.out);// 得到当前的系统属性。并将属性列表输出到控制台String encoding = System.getProperty("file.encoding");System.out.println("Encoding:" + encoding);return encoding;}}
重点就是要区分英文单个字符串和汉字单个字符串的不同,在非iso-8859-1的情况下都不相同,这样就可以进行区分了。
结果截图:
汉字在各种编码下所占字节数请见:
http://www.cnblogs.com/lancidie/archive/2013/04/12/3017241.html
1 0
- JAVA面试题_根据字节数截取字符串,但是汉字不能截取半个。
- 一个常见面试题: 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个。
- java根据字节 截取字符串,保证汉字不被截取半个
- JAVA 中字符串的截取,要求不能截取半个汉字
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个。
- 编写一个截取字符串的函数,输入为一个字符串和字节数, 输出为按字节截取的字符串。 但是要保证汉字不被截半个。
- Java中文字符串截取,不能返回半个汉字
- Java 测试,按字节数截取字符串,不能输出半个中文
- 字符串截取(按指定的字节数)汉字不可以截取半个
- java根据字节数截取字符串
- Java根据字节数截取完整字符串
- java面试题---按字节截取字符串
- 根据字节数截取字符串...
- 根据字节数截取字符串
- 根据字节数截取字符串
- 20、JAVA 中字符串的截取,要求不能截取半个汉字
- 面试题之——对包含汉字的字符串截取指定字节数
- 安装ubuntu后没有windows启动项
- 译码器(decoder)原理图
- 属性动画:ObjectAnimator、PropertyValuesHolder、ValueAnimator、AnimatorSet
- TOJ 3237.Change Base
- Centos 7安装docker的日志
- JAVA面试题_根据字节数截取字符串,但是汉字不能截取半个。
- 二、Lua中的表达式
- android网络相关
- React Native 导航(Navigator)详解——实例一
- hadoop由于NodeManager无法启动而导致执行Jar包出现running job卡住的解决方案之一...
- 《OpenGL ES 2.0 Programming Guide》第12章“最简单的ReadPixels并保存为BMP”示例代码【C语言版】
- Codeforces Round #369 (Div. 2) A~D
- CSU1810(2016年湖南省第十二届大学生计算机程序设计竞赛 - H)
- 分布式系统下的纠删码(二) -- Locally Repairable Codes (LRC)