本帖最后由 郭帅帅 于 2014-5-21 15:20 编辑
- package com.itheima;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- public class Test10 {
- /**
- * 这个是从网上借鉴来的,不是太懂
- * 编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:
- * 从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- // TODO Auto-generated method stub
- String s = "HM程序员";
- System.out.println(subStrByByte(s, 3));
- }
-
- //将截取字符串的方法封装成单独的函数;
- public static String subStrByByte(String str, int bLen) throws Exception {
- //定义两个变量记录长度值;
- int preLen = 0;
- int len = 0;
- str = str.substring(0, bLen);
-
- //用GBK的码表将字符串添加到字节数组当中;
- byte[] b = str.getBytes("GBK");
- if(b.length == bLen) {
- return str;
- }
- //这个for循环里面的判断没搞懂!!!
- for(int i=0; i<str.length(); i++) {
-
- if(str.charAt(i) < 0 || str.charAt(i) > 127) {
- len += 2;
- }
- else {
- len += 1;
- }
- if(len > bLen) {
- byte[] newB = new byte[preLen];
- System.arraycopy(b, 0, newB, 0, preLen);
- return new String(newB);
- }
- preLen = len;
- }
- return str;
- }
- }
复制代码 |