编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个

来源:互联网 发布:数据恢复收费标准 编辑:程序博客网 时间:2024/05/18 01:38

import java.io.UnsupportedEncodingException;
/**
 * 题目: 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的
 * 字符串。 但是要保证汉字不被截半个,如"我ABC",4,应该截为"我AB",输入"我ABC
 * 汉DEF",6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
 */
public class StringTest {
 static void splitString(String str, int length)
   throws UnsupportedEncodingException {
  if(length<=0){
  }
  else{
   // 将字符串按照"gbk"编码形式解码为字节序列,并保存在数组中
   // 当汉字采用GBK编码时占两个字节,而采用UTF-8编码时占3个字节,并且都为负整数
   byte[] bt = str.getBytes("gbk");
   if (length <= bt.length) {
    //判断在要截取长度的数组中有多少个负数
    int count = 0;
    for (int i = 0; i < length; i++) {
     if(bt[i]<0)
      count++;
    }
    if(count%2==0){
     //如果刚好被2整除,说明截取不会出现乱码
     System.out.println(new String(bt, 0,length, "gbk"));
    }else{
     //不能整除则会出现乱码,则需要把最后一个字节去掉
     System.out.println(new String(bt, 0,--length, "gbk"));
    }
   }
  }

 }

 public static void main(String[] args) {
  try {
   StringTest.splitString("我ABC汉他DEF", 6);
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }
 }
}

 

引用别人的 代码不好意思了

原创粉丝点击