写一个函数,2 个参数,1 个字符串,1 个字节数,返回截取的字符串。

要求字符串中的中文不能出现乱码:如split("我ABC", 4);应该截为我AB,输入split("我ABC汉DEF", 6);应该输出为我ABC而不是我ABC+汉的半个

参考解答

private static void split(String str, int c) {
  byte[] b;
  int count = 0;
  try {
    // gbk是两个字节,首个字节是负数
    b = str.getBytes("gbk");
    boolean foundCN = false;
    for (int i = 0; i < b.length; i++) {
      // 检查出来是汉字,进入下一轮
      if (!foundCN && b[i] < 0) {
        foundCN = true;
        continue;
      }
      // 是汉字,如果没超过截取长度,有效字节数+2,否则退出
      if (foundCN) {
        if (count + 2 > c) {
          break;
        }
        count += 2;
        foundCN = false;
        continue;
      }
      // 是英文,超出长度,退出
      if (count == c) {
        break;
      }
      count++;
    }
    // 根据有效字节数,创建截取后字符串
    byte[] b2 = new byte[count];
    System.arraycopy(b, 0, b2, 0, count);
    System.out.println(new String(b2, "gbk"));
  } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
  }

}

测试:

split("我ABC", 4);        // 输出 我AB
split("我ABC汉DEF", 6);   // 输出 我ABC
split("一二三", 6);       // 输出 一二三

results matching ""

    No results matching ""