刚做了基础测试,发现下面的题目挺绕的,自己写了一个方法,给大家参考。
10、编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),
例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
public class Test10 {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
System.out.println(subStr("HM程序员",3));
}
/*
* 思路:通过比较新子串和源字符串最后位置上的字符是否相等来判断新子串中最后一个字节是否为半个汉字,
* 如果相同则说明最后截取的是一个完整的汉字,如果不同则说明新子串的字节数组最后一个字节是一个汉字的半边,需要舍弃,
* 所以数组指针向左移一位,以保证完整的汉字输出。
*/
public static String subStr(String str,int num) throws Exception{
//将源字符串转换为byte数组
byte[] b=str.getBytes("GBK");
//如果截取长度等于0或者大于字符串长度时,直接返回源字符串
if(num>0&&num<b.length){
//根据现有的长度尝试截取字符串
String s= new String(b,0,num);
//获取新字符串最后一位的index
int len=s.length()-1;
//比较源字符串和新字符串最后一位的值是否相等
if(s.charAt(len)!=str.charAt(len)){
//如果不同则说明新子串的字节数组最后一个字节是一个汉字的半边,所以数组指针向左移一位
return new String(b,0,num-1);
}
return s;
}
return str;
}
}
|
|