论坛已有这个题目的很多版本答案,这是我自己的思路,供大家探讨学习
package com.itheima;
public class Test10 {
/*
*编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),
* 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
*
**/
public static String Substring(String s, int length) throws Exception {
byte[] bytesBuffer = s.getBytes("GBK");
int bytesLength=bytesBuffer.length;
if(bytesLength<length)
return s;
/* 采用统计汉子占用字节数的方法判断是否有半个汉子,一个汉子占用两个字节,且每个字节都小于0
* 假如有半个汉子,则汉子字节数就是奇数,截取时去掉最后一个字节即可
* 没有半个汉子,则汉子字节数就是偶数
* */
int index=0;
int chineseCount=0;//统计汉子占用字节数
while(index<bytesLength && length>0)
{
if(bytesBuffer[index]<0)
{
chineseCount++; //统计汉子的字节数,一个汉子占两个字节,每个字节都小于0,
}
index++;
length--;
}
if(chineseCount%2==1) //如果最后一个汉子的第一个字节恰巧在0--length内,则小于0的字节数是奇数,将来拷贝数据时去掉最后一个字节
{
index--;
}
return new String(bytesBuffer, 0, index, "GBK");
}
public static void main(String args[]) throws Exception {
//测试字符串:HM程序员
String s = "HM程序员";
//根据想截取的字节数可设置大小,例如3
String ss = Test10.Substring(s, 4);
System.out.println(ss);
}
}
|