Java中取出一个字节,如何判断这一个字节是否是一个汉字中的一部分

Java中取出一个字节,如何判断这一个字节是否是一个汉字中的一部分,如一个汉字分为两个字节,取出一个字节,可以判断出这是汉字的第一个字节

String a = new String("我是一串含有中文的字符串");然后对byte[] b = a.getBytes();转化为字节类型的数组,

public class Test{
public static void main(String[] args) {
String a = new String("hw,mmmm字符串");
byte[] b = a.getBytes();
for(int i = 0,m=b.length;i<m;i++){
if(b[i] >= 0 && b[i] <=127){//10进制ascill表0到127
System.out.println(b[i]+":我是字母数字或者符号");
}else{
System.out.println(b[i]+":我是中文日文或者韩文,反正键盘上不能直接看到我");
}
}
}
}

输出的结果是:

104:我是字母数字或者符号

119:我是字母数字或者符号

44:我是字母数字或者符号

109:我是字母数字或者符号

109:我是字母数字或者符号

109:我是字母数字或者符号

109:我是字母数字或者符号

-27:我是中文日文或者韩文,反正键盘上不能直接看到我

-83:我是中文日文或者韩文,反正键盘上不能直接看到我

-105:我是中文日文或者韩文,反正键盘上不能直接看到我

-25:我是中文日文或者韩文,反正键盘上不能直接看到我

-84:我是中文日文或者韩文,反正键盘上不能直接看到我

-90:我是中文日文或者韩文,反正键盘上不能直接看到我

-28:我是中文日文或者韩文,反正键盘上不能直接看到我

-72:我是中文日文或者韩文,反正键盘上不能直接看到我

-78:我是中文日文或者韩文,反正键盘上不能直接看到我


大于0的表示键盘上所有字母数字符号的十进制ascill,比如104对应的h,可以查看ascill表。

我电脑一个中文占3个字节,测试了日语和韩语和中文一样,是不是可以找到规律呢?

为了与你的问题一致,现在假定我电脑里中文占两个字节,我们把小于0的值单独放到一个数组里,如果数组索引除2,余数为1则是前半部分,余数为0则是后半部分。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-21
应该是取不出来的!!即使取出来了,那就不是中文字节了
第2个回答  2015-05-21
你要怎么取出来?追问

将一个string类型的中文字符串如 String a = new String("判断汉字a");然后对byte[] b = a.getBytes();转化为字节类型的数组,问在b 中一个字节b[3],如何判断b[3]这个字节是不是一个汉字字符中的一个字节还是一个普通的字符,如果b[3]是汉字字符中的一个字节,如何知道他是字节中前半部分的字节还是后半部分的字节

第3个回答  2018-06-27
最近我也好奇这个问题,我想应该是我这个想法,但不知道在哪实现的,拿UTF-8说,比如现在你的文本有2个字符“A方”,现在IO流里是二进制的“01101010101001.......”(假设是这样),但是utf-8有编码规范的,也就是说“A方”这个转成二进制的代码固定的,然后开始读字符,第一次读了8个byte,可以解析成A,读第二个字节(“方”占了3个字节,现在读的这个字节是“方”的一部分,它怎么知道这是个汉字而不是别的呢?)前面我说了,utf-8编码有固定格式,比如说一个汉字的3个字节的编码,开头一定是“0111”,表示这个字符是3个字节的字符,你可以去查查utf-8的编码表,首先它读到了“0111XXXXX”,判断开头,知道这不是一个字母,而是个3字节的字符,于是不解析,接着读2字节,读完后(假设是“0111XXXXX XXXXXXXX XXXXXXXX”)开始解析,根据编码表知道这个是个“方”字。但java具体在哪做的这个我确实不知道。我感觉这不是java做的东西,应该交给底层的c去实现。。。
相似回答