A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

比如下面的代码:
String str = "我adb3们daio";
for(int i=0; i<str.length(); i++){
System.out.println(str.charAt(i));
}
当i=1时,可以取出第一个汉字,而这个汉字是以字符的形式出现的,无法获取这个字符的字节数。怎么判断,才能知道取得一个字符就是一个汉字?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

5 个回复

正序浏览
汉字的默认编码gbk。所以一个汉字占两个字节,且都是负数。 用getBytes()方法获取所输入字符串的字节数组byte[],遍历数组,计算出有多少负数,负数的和就是所求字符串中汉字的字节数了
回复 使用道具 举报
楼上的代码有问题。
你试试:
我的代码没问题,7
a我的代码没问题,7
回复 使用道具 举报
  1. public class Test10 {
  2.         public static void main(String[] args) {
  3.                 String str = "我ABC汉DEF";
  4.                 byte b []= str.getBytes();
  5.                 int num = 6;
  6.                 if(b[5]<0&&b[6]<0) {
  7.                         System.out.println(new String(b,0,num-1));
  8.                 }else{
  9.                         System.out.println(new String(b,0,6));
  10.                 }
  11.         }
  12. }
复制代码
我得测试题,写的不完善,就那么个意思,你再组织一下吧

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
吧string使用getBytes转成byte数组。
遍历判断是否为负,为负的的话,这个byte是汉字中的一个(可能是前面的一个,也可能是后面的一个),还要继续往前判断。
比如:
我adb3们daio
--++++--+++
这个还好弄,前面还是负的,那么前面的一个位置的byte,加上当前的位置的byte就是一个汉字。
遍历判断是否为负
-- -- -- -- -- -- -- --
而这个,你不光要判断前面的,还要一直判断到第一个byte,从而确定这个位置的byte是一个汉字的开头还是结尾的byte。

可能写得不是很清楚,但我尽力了。 希望你明白。这个是我入学测试里的题目。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
gbk中,汉字的占2个byte而且这两个byte都是1开头的,也就是一个负数。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马