- package basetest;
- import java.io.*;
- /*编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:从“HM程序员”中
- * 截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是“HM”而不要出现半个中文。
- * 思路:
- * 1.将指定的字符串变成字节数组
- * 2.通过判断指定字节数组的长度来返回相应的字符串
- * 3.截取字节生成新字符串和源字符串上的相同字符比较,一样说明没有半个汉字,返回字符串,不一样说明有
- * 半个汉字,返回-1后的字符串。
- */
- public class Test10 {
- public static void main(String[] args) {
- String s ="heima程序员很牛逼!";//源字符串
- System.out.println(getString(s,9));
- }
- public static String getString(String str,int num) {
- //将字符串转换成字节数组时,需要处理不支持GBK机器上的异常
- byte[] buf =null;
- try{
- buf =str.getBytes("GBK");//将指定字符串变成字节数组
- }
- catch(IOException e){
- e.printStackTrace();//捕获异常
- }
- if(num<0) //指定获取的字节数如果小于0,抛Runtime异常
- throw new RuntimeException("获取字节个数为负数,错误");
- else if (num>str.length())//截取字节数大于原字符串长度,返回原字符串
- return str;
- else {
- String s = new String(buf,0,num);//截取字节数组转换成字符串
- int length = s.length();
- if(s.charAt(length-1)!=str.charAt(length-1)){//转换后的字符串和原字符串相同位置的字符比较,相同返回原串,
- //不相同说明截到半个汉字,返回从0到截取数字-1位置处的字节转换成字符串。
- s = s.substring(0,length-1);
- return s;
- }
- return s;
-
- }
-
- }
-
-
- }
复制代码
|