编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
/** * 10、 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 * 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 * * @author */ public class AA { public static void main(String[] args) { String srcStr1 = "我ABC"; String srcStr2 = "我ABC汉DEF"; splitString(srcStr1, 3); splitString(srcStr2, 5); } public static void splitString(String src, int len) { int byteNum = 0; if (null == src) { System.out.println("The source String is null!"); return; } byte bt[]=null; try { bt = src.getBytes("GBK");//采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节;采用GB2312或GBK编码方式时,一个中文字符占2个字节;而采用UTF-8编码方式时,一个中文字符会占3个字节 byteNum = bt.length; // 将String转换成byte字节数组 if (len > byteNum) { len = byteNum; } int num=0; // 判断是否出现了截半,截半的话字节对于的ASC码是小于0的值 if (bt[len-1] < 0) { for (int j=0;j<=len-1;j++) { if (bt[j]<0) { num++; num = num%2; } else { num=0; } } if (num==0) { String subStrx = new String(bt, 0, len,"GBK");//前包括后不包括 System.out.println("subStrx==" + subStrx); } else { String subStrx = new String(bt, 0, len-1,"GBK"); System.out.println("subStrx==" + subStrx); } } else { String subStrx = new String(bt, 0, len,"GBK"); System.out.println("subStrx==" + subStrx); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。