编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串

编程题
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC汉”而不是“我ABC+汉的半个”。
在网上看了很多关于此问题的解答,都感觉挺复杂的,于是自己写了一个,供大家参考,程序存在不足之处,敬请批主指正。

import java.io.UnsupportedEncodingException;

public class TestC {

 /**
  * @author zhyd
  * @param input
  *            输入字符串
  * @param subLength
  *            想要截取的字节数
  * @throws UnsupportedEncodingException
  */
 public String subStrByBytes(String input, int subLength)
   throws UnsupportedEncodingException {
  // 总的字符数,A是一个字符,汉 也只是一个字符
  int totalCharacter = input.length();
  // 总的字节数
  int totalBytes = input.getBytes("GBK").length;
  System.out.println("total bytes:" + input.getBytes("GBK").length
    + ",total character: " + totalCharacter);
  if (subLength > totalBytes) {
   System.err.println("input length error!please check.");
   return "";
  }
  int current = 0;
  String result = "";
  // 遍历字符串,直到截取目标长度
  for (int i = 0; i < totalCharacter; i++) {
   String tmp = input.substring(i, i + 1);
   int c_len = tmp.getBytes("GBK").length;
   if (current < subLength) {
    current += c_len;
    result += tmp;
   }
  }
  System.out.println("result==" + result);

  return result;

 }

 public static void main(String[] args) throws UnsupportedEncodingException {
  String str = "我ABC,中<汉DEF";
  int len = 7;
  TestC demo = new TestC();
  String out = demo.subStrByBytes(str, len);
  System.out.println(str + "   >>get " + len + " bytes is :     " + out);
 }
}

你可能感兴趣的:(截取字符串)