- package cn.itcast.day14.exercise;
- public class Exercise7 {
- public static void main(String[] args) {
- String s = "中驫文abc"; // 4
- print(s, 3);
- print(s, 4);
- print(s, 5);
- print(s, 6);
- print(s, 7);
-
- /*
- byte[] arr = s.getBytes();
- System.out.println(Arrays.toString(arr));
- System.out.println(isCnBegin(arr, 2));
- System.out.println(isCnBegin(arr, 3));
- System.out.println(isCnBegin(arr, 4));
- System.out.println(isCnBegin(arr, 5));
- */
- }
-
- /*
- * 从s字符串中打印count个字节, 不能打印出半个中文
- * 如果count位置是中文的前半, 那么不打印
- */
- public static void print(String s, int count) {
- byte[] arr = s.getBytes();
- count = isCnBegin(arr, count - 1) ? count - 1 : count;
- System.out.println(new String(arr, 0, count));
- }
-
- // GBK码表, 英文是1个正数, 中文第一个是负数, 第二个可正可负
- // 负数 并且 前一个不是中文前半
- public static boolean isCnBegin(byte[] arr, int index) {
- boolean b = false; // b代表前一个字节是否是中文的前一半
- for (int i = 0; i <= index; i++)
- b = arr[i] < 0 && !b; // 当前字节是负数, 并且前一个不是中文前一半, 当前就是中文前一半
- return b;
- }
- }
复制代码 谁能告诉我 isCnBegin()方法内是如何循环,一次结果是什么。。 我看不太明白这里~~~ |