public clas XXX{
/**
*Test50-编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
*例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,
*截取3个字节也要是"HM"而不要出现半个中文
*/
public static void main(String[] args) {
final int num =7; //num代表要截取的字节数量
String s ="HM程序s员";
byte[] b = s.getBytes();
byte[] b1 = new byte[1];//用来存放字符的字节
byte[] b2 = new byte[2];//用来存放中文的字节
for (int i = 0; i < num; i++) {
//如果读取的字节大于0,说明是一个字符,当然中文的第二个字节也有可能大于0(0x40-0xFE),
//所以如果第一个字节小于0,就要连续跳过两个字节;
if(b[i]>=0){
b1[0] = b[i];//如果此字节小于0,则直接转换成字符;
System.out.println(new String(b1));
}
//如果小于0,则说明是中文的一个字节;
else{
if(i<num)
b2[0] = b[i++];
if(i<num){ //如果i大于num,说明已经读到最后一个字节,但是此字节是中文的半个字节,无法组成字符,ze不打印
b2[1] = b[i]; //这里i不能再++,因为for循环里面i++,如果加的话就会跳过一个字节
System.out.println(new String(b2));
}
}
}
}
}
|
|