- public class Test10 {
- public static void main(String[] args) throws UnsupportedEncodingException {
- Scanner sc = new Scanner(System.in);// 创建一个Scanner对象
- System.out.println("请输入字符串");
- String s = sc.nextLine();// 输入字符串参数
- System.out.println("请输入字节数");
- int num = sc.nextInt();// 输入字节数参数
- sc.close();// 关闭流
- String s1 = splitDemo(s, num);// 将参数传入调用的方法
- System.out.println("切割后的字符串是:" + s1);// 对截取结果进行打印
- }
- public static String splitDemo(String str, int num)
- throws UnsupportedEncodingException {
- if (str == null) {// 当字符串被赋值为null时的情况
- return "你的字符串没有值";
- }
- if ("".equals(str)) {// 当字符串长度为零的情况
- return "你输入的是空的";
- }
- int count = 0;// 定义一个数来记录小于零的字节数用来求有多少汉字
- byte[] arr = str.getBytes("GB2312");// 把传入的字符串通过getbyte(String str)方法得到的一个GB2312编码的字节数组arr
- for (int i = 0; i < num; i++) {// 遍历0到num这段字节数组求出负数的个数
- if (arr[i] < 0) {
- count++;// 求出count的值
- }
- }
- if (count % 2 == 0) {// 负字节数是偶数的情况
- return new String(arr, 0, num, "GB2312");
- }
- if (count % 2 == 1) {// 负数字节数是基数的情况
- return new String(arr, 0, num + 1, "GB2312");
- }
-
- return null;
复制代码 这个是我自己做的,那个GBK的编码的汉字对应的字节数值不一定是负数,所以我采用的是GB2312编码表来写的,希望能解决你的问题。
名称 | 第一字节 | 第二字节 | GB2312 | 0xB0-0xF7(176-247) | 0xA0-0xFE(160-254) | GBK | 0x81-0xFE(129-254) | 0x40-0xFE(64-254) | 这是GBk和GB2312编码表的区别,希望能帮到你!
|