在网上看到一个考试题,做了试试看的,发现网上给的很多答案并不完全标准,不完全符合题目要求。题目如下:
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC4”,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
package main;
/**
* @author H小阿飞
*/
public class SplitChar {
/**
在UTF-8字符集中一个中文字
占2个字节的:0个
占3个字节的:基本等同于GBK,含21000多个汉字
占4个字节的:中日韩超大字符集里面的汉字,有5万多个
*/
public void splitIt(String str,int bytes){
char[] getChar = str.toCharArray(); //字符串以字符数组的形式存储
int charLength = getChar.length;
System.out.println("字符数组的长度:"+charLength);
int k = 0;
String reStr = "";
for(int i=0;i<charLength&&bytes>k;i++){ //bytes>k 用来限制循环的条件。形象点讲:bytes相当于一个剪切点,k从字符串数组起点游动寻找此bytes点。
String s1 = String.valueOf(getChar[i]); //获取字符串数组中的字符并转换成String型
byte[] getBytes = s1.getBytes(); //字符串数组中的字符串以字节数组的形式存储
if(getBytes.length==3){ //为了应付题目,把一个汉字当做2个字节
k += getBytes.length-1;
}else{
k += getBytes.length;
}
if(k<=bytes){ //处理如:"a我",2的情况,只输出"a",而不是"a我"
reStr += getChar[i];
}
}
System.out.println("截取后所需的字符串:"+reStr);
}
public static void main(String[] args){
String input = " a我b是c一d个e中f国g人";
String number = "7";
int num = Integer.valueOf(number);
SplitChar splitChar = new SplitChar();
splitChar.splitIt(input,num);
}
}
注:题目本身并不完善,因为它认为一个中文字是两个字节的,而且我们平时也都是认为一个中文汉字是两个字节,一个英文字母是一个字节,但在UTF-8字符集下,中文汉字其实是3个字节,这也是我做了这条题目后才发现的。
对此我有个疑问:那在何种情况下一个中文字是两个字节呢?
应题目要求,我对中文字节数减了1,完全按照题目意思去写的代码。
下面的附近是对此进行了扩展,多了一个按字符截取字符串的功能
分享到:
相关推荐
主要介绍了JAVA如何按字节截取字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了C#实现根据字节数截取字符串并加上省略号的方法,比较实用的功能,需要的朋友可以参考下
主要介绍了Go语言按字节截取字符串的方法,涉及Go语言操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下
Java 按照字节来截取字符串的工具,不会出现半个汉字。一个中文两个字节,一个英文字符只占 1 个字节** 1. 通常我们用于前端显示的时候,防止标题过长
在网页展示中经常会碰到,标题过长,需要截取字符串,用CSS的实现的话各种兼容问题,下面为大家介绍下javascript如何按字节截取字符串
下面小编就为大家带来一篇java按字节截取带有汉字的字符串的解法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
字符串截取函数,只限单字节字符使用(对于中文的截取时遇上奇数长度是会出现乱码,需另行处理),本函数可截取字符串指定范围内的字符。
主要介绍了JS判断字符串字节数并截取长度的方法,涉及JavaScript针对页面元素与字符串的动态操作技巧,需要的朋友可以参考下