黑马程序员技术交流社区
标题:
一道获取中文字符并判断输出的问题,看不懂其中的循环体。
[打印本页]
作者:
秦岩
时间:
2012-4-10 09:14
标题:
一道获取中文字符并判断输出的问题,看不懂其中的循环体。
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()方法内是如何循环,一次结果是什么。。 我看不太明白这里~~~
作者:
袁计艳
时间:
2012-4-10 11:06
首先是参数byte[] arr 它的内容是这样的:[-42, -48, -13, 81, -50, -60, 97, 98, 99]
一个汉字两个字节 前一半是负数 后一半可正可负,
然后是方法内部:
boolean b = false; // b代表前一个字节是否是中文的前一半
此处默认是false 那么它就代表了 默认前一个字节不是中文的前一半;
再次是循环体:
b = arr[i] < 0 && !b; // 当前字节是负数, 并且前一个不是中文前一半, 当前就是中文前一半
此处注释我个人认为有点问题,b的内容判断是:当前字节是负数,并且前一个是中文的前一半(因为b默认是fasle !b就是true);
然后把b返回
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2