今天做了几个黑马入学测试题这个写了半天又点小费劲,自己总结了下。
10、编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表).
* 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
这个自己写的这个 还是比较容易理解吧,在网上看了些程序都比较复杂。
public class Test10 {
public static void bytesubString(String str,int len){
byte[] by = null;//初始化数组 赋值null;
if(str!=null){//要截取的字符串不能为null
try {
by = str.getBytes("GBK");//把字符串转换成字节数组,编码。
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
System.out.println("输入的值为null");
return;//如果为空就结束、
}
if(by.length<len){//如果len大于 字节数组的长度那么就无法截取了,
System.out.println("您输入的字符串长度错误。");
return;
}
String newstr = new String(by,0,len);//获取要截取的字符串
if(!(newstr == str.substring(0, len))){//判断从源字符串上截取新字符串的位置上的那个字符串和这个新字符串是否相等
//如果不相等说明新字符串截取到了半个汉子,
//我们再判断这心字符串的长度是否小于2,如果小于2那么代表只有一个字节,而且那个自己还是半个汉子,所以把他的值改为null
if(newstr.length()<2){
newstr = null;
}
else{
//否则我们把这个字符串的指针向左移动一个 减一个字节,就获得了这个新的字符串了
newstr = newstr.substring(0,len-1);
}
}
System.out.println(newstr);
//打印这个新的字符串
}
public static void main(String[] args) {
bytesubString("HM黑马", 4);
}
}
|