在网上看到一个考试题,做了试试看的,发现网上给的很多答案并不完全标准,不完全符合题目要求。题目如下:
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我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,完全按照题目意思去写的代码。
下面的附近是对此进行了扩展,多了一个按字符截取字符串的功能
分享到:
相关推荐
C# 按照字节长度截取字符串,可以截取任意字节长度得字符串,使用了一点正则表达式。
实现一个按字节来截取字符串的方法,功能类似于string类的substring方法,String类是按字符截取 的,例如"中国abc".substring(1,3),将返回“国a”。这里 要求按字节截取,一个英文字符当一个字节,一个中文字符当两...
主要介绍了C#实现根据字节数截取字符串并加上省略号的方法,比较实用的功能,需要的朋友可以参考下
最近需要用到按字节数截取字符串。在网上找了很多方法。 Encoding.Default.GetString采用的Default Encoding.UTF8.GetBytes采用的是utf-8编码。这样当然是乱码。尤其出现中文时候。 对这类数据处理当然要用统一的...
按字节长度截取字符串(支持截取带HTML代码样式的字符串) ,补全不完整的HTML代码
字符串按照指定的字节数来截取
asp.net c# String类添加按字节截取字符串的扩展方法
用SQL语句截取字符串, string substr ( string string, int start [, int length]) 参数1:处理字符串 参数2:截取的起始位置(第一个字符是从0开始) 参数3:截取的字符数量
主要介绍了JAVA如何按字节截取字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java编写一个截取字符串的函数,输入为一个字符串和字节数
本文实例讲述了Go语言按字节截取字符串的方法。分享给大家供大家参考。具体实现方法如下: 代码如下:// 按字节截取字符串 utf-8不乱码 func SubstrByByte(str string, length int) string { bs := []byte(str)[:...
一般截取字符串是按照字符截取的,现在这个代码是按照字节截取字符
asp.net截取字符串方法 使用字节精确计算 计算空格 直接复制使用 简单
字符串截取,按字节截取字符串,截取字符串帮助类
7. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉...
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。 start 是一个整数,指定子串的开始位置。 length 是一个整数,指定子串的长度(要返回的字符数或字节数)。 ...
关于java按字节截取带有汉字的字符串的解法.不错的一个程序。我也是从高手那拿来的,觉得不错,传上来给感兴趣的朋友学习学习。
Java 按照字节来截取字符串的工具,不会出现半个汉字。一个中文两个字节,一个英文字符只占 1 个字节** 1. 通常我们用于前端显示的时候,防止标题过长