黑马程序员技术交流社区
标题:
入学测试代码:编写函数,从一个字符串中按字节数截取...
[打印本页]
作者:
David.L
时间:
2014-9-25 16:43
标题:
入学测试代码:编写函数,从一个字符串中按字节数截取...
本帖最后由 David.L 于 2014-10-6 20:32 编辑
自己写的代码分享,欢迎探讨指导
package com.itheima;
/*
* 10、编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),
* 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文.
*
* 思路:
* 1,GBK编码表中,汉字由2字节表示,且2个字节前的最高位都是1,在byte类型中,最高位1代表负数
* 2,字母和数字都是一个字节,用一个正数表示。
* 3,java默认编码是unicode,所以获取字节数组时需要指定GBK编码
* */
public class Test10 {
public static void main(String[] args) {
//调用函数,输出测试
System.out.println(mySubstring("HM程序员最牛X",2));
System.out.println(mySubstring("HM程序员最牛X",4));
System.out.println(mySubstring("HM程序员最牛X",3));
System.out.println(mySubstring("HM程序员最牛X",10));
}
//定义一个方法,接收原始字符串和需要截取的字节数,返回截取到的字符串
public static String mySubstring(String str,int count) {
//定义一个byte[]
byte[] bytes = null;
//获取字节数组时,指定为按GBK编码获取,需要处理不支持GBK的机子上的异常
try {
bytes = str.getBytes("GBK");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//判断输入的字节个数是不是正整数
if(count<0)
throw new RuntimeException("获取字节个数为负数,错误!");
//判断输入的字节个数是否大于原始字符串长度,是,则输出原字符串
else if(count>str.length())
return str;
//判断输入的字节个数是不是奇数
else if(count>0 && count%2==1) {
//是奇数,才判断要获取的最后一个字节是不是汉字的一半,通过负数判断
if((byte)bytes[count-1]<0){
//是汉字一半,就减一个字节
count--;
}
}
//获取要得到的新字节数组
byte[] newbytes=new byte[count];
for(int x=0;x<count;x++){
newbytes[x]=bytes[x];
}
//将新字节数组转回字符串,并返回
String newStr=new String(newbytes);
return newStr;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2