A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 qian0217wei 于 2015-6-10 01:09 编辑

很久没发帖了,发个帖子证明下我的存在,还有分享一道基础测试题!希望大家给出意见!
  1. /*
  2. * 、编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),
  3. * 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
  4. * 思路:因为GBK的编码方式汉字是两个负数,字符对应的是一个正数,所以可以通过将字符串变成字节数组,通过遍历获取负数出现的次数,用count记录,如果截取的数对应的编码大于0,就直接截取,如果小于0判断count%2==0;满足就直接从截取位置截取,不满足就从前个位置开始截取。
  5. * */
  6. import java.io.UnsupportedEncodingException;

  7. public class SplitString {
  8.         public static void main(String[] args) throws UnsupportedEncodingException {
  9.                 String sc = "HM程序员";
  10.                 String s1 = split(sc, 3);
  11.                 System.out.println(s1);

  12.         }

  13.         public static String split(String s, int x)
  14.                         throws UnsupportedEncodingException {
  15.                 byte[] bytes = null;
  16.                 if (s != null) {
  17.                         bytes = s.getBytes("GBK");
  18.                 }
  19.                 if (x > bytes.length) {
  20.                         System.out.println("角标越界");
  21.                 }
  22.                 int count = 0;
  23.                 for (int i = 0; i < x; i++) {
  24.                         if (bytes[i] < 0)
  25.                                 count++;
  26.                         // System.out.println(count);
  27.                 }
  28.                 if (bytes[x - 1] > 0) {
  29.                         s = s.substring(0, x - count / 2);//汉字出现的两次,所以要减去count/2

  30.                 } else if (count % 2 == 0) {
  31.                         s = s.substring(0, x - count / 2);

  32.                 } else {
  33.                         s = s.substring(0, x - 1 - count / 2);

  34.                 }
  35.                 return s;

  36.         }
  37. }
复制代码



欢迎交流,提出意见!






2 个回复

正序浏览
想要那片海 发表于 2015-6-10 08:16
我是用截取后的子字符串与元字符串相比较,如果元字符串包含子字符串,那么就说明没有截取到半个中文,如果 ...

可以把代码发出来,看看吗?!
回复 使用道具 举报
我是用截取后的子字符串与元字符串相比较,如果元字符串包含子字符串,那么就说明没有截取到半个中文,如果不包含就是截取了半个中文,这时候让截取数-1,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马