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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 紫衣侯 于 2013-5-31 18:30 编辑

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串但是要保证汉字不被截半个。
这个题大家应该都见过做过,不过我有一个做法不知道对不对,请计算机基础好的同学看看。
public static void main(String[] args) {
                sub("我减师hde肥sfsa", 5);
        }

        public static void sub(String str, int k) {
         byte[] by = str.getBytes();
         byte[] bb = new byte[k+1];
         if(by[k+1]>0){
                 for(int i = 0;i<k;i++){
                         bb=by;
                 }
         }else{
                 for(int i = 0;i<k+1;i++){
                         bb=by;
                 }
         }
         String result = new String(bb);
         System.out.println(result);
        }
}
这是简单实现的代码,因为我发现通过getbyte()方法获取byte数组后,由于一个汉字占两个字节,如果打印出数组会发现,如果是汉字就会是两个负数,其它则是一个正数,这就是我的一个想法,不过不知道对不对,这到底只是表象还是真理?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
本帖最后由 FantasticPie 于 2013-5-28 18:19 编辑

你的想法是正确的,比如:
byte[] by = "我".getBytes();
for(int i=0; i<by.length; i++){
    System.out.print(by【i】 + "\t");
}
打印的结果就是-50 -46,由此可见一个汉字确实被读作了两个负数。

所以说这样的做法来截取字符串的方法是错误的。

但是打印:System.out.print((int)'我');结果是25105。

所以解决的办法就是把字符串改为字符数组,就能解决读取汉字的问题。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
你上面那个代码运行起来还是会打出乱码啊,如果是汉字就会是两个负数,其它则是一个正数,这就是我的一个想法,不过不知道对不对,这到底只是表象还是真理?

还有这句话,我没能理解,抱歉楼主
回复 使用道具 举报
画饼 发表于 2013-5-28 18:02
你上面那个代码运行起来还是会打出乱码啊,如果是汉字就会是两个负数,其它则是一个正数,这就是我的一个想 ...

我运行就不会乱码。“如果是汉字就会是两个负数,其它则是一个正数,这就是我的一个想法,不过不知道对不对,这到底只是表象还是真理?”这就话的意思就是通过getBytes()来获取中文的字符串的字节数组的时候,每个中文读取的结果是两个负数。我上面的回答说明了这个问题。
回复 使用道具 举报
本帖最后由 FantasticPie 于 2013-5-28 18:10 编辑
FantasticPie 发表于 2013-5-28 18:00
你的想法是正确的,比如:
byte[] by = "我".getBytes();
for(int i=0; i

上面的代码有点错误:

byte[] by = "我".getBytes();
for(int i=0; i<by.length; i++){
    System.out.print(by + "\t");//这里应该是by【i】
}
回复 使用道具 举报
FantasticPie 发表于 2013-5-28 18:00
你的想法是正确的,比如:
byte[] by = "我".getBytes();
for(int i=0; i

感觉前言不搭后语啊,怎么所以是错的。。。   后面的不是字节吧,char 类型底层本来就是数字组成的,可以和int 互转
回复 使用道具 举报
画饼 发表于 2013-5-28 18:02
你上面那个代码运行起来还是会打出乱码啊,如果是汉字就会是两个负数,其它则是一个正数,这就是我的一个想 ...

意思就是“汉字转成字节后是负数”这只是一部分的现象还是全部? 不知道底层是什么样的
回复 使用道具 举报
紫衣侯 发表于 2013-5-28 18:33
意思就是“汉字转成字节后是负数”这只是一部分的现象还是全部? 不知道底层是什么样的 ...

这个以我现在的积累只知道getBytes()是这样的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马