黑马程序员技术交流社区

标题: 下面 该如何理解 [打印本页]

作者: 914360849    时间: 2015-5-29 21:33
标题: 下面 该如何理解
从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
作者: 仅此一抹心醉    时间: 2015-5-29 21:38
没看懂你的意思,,是不是说一个中文汉字在GBK编码中占两个字节,是切不是半个的?
作者: 叶燕希    时间: 2015-5-29 21:46
能输出半个中文的吗?                        
作者: 雪域星辰    时间: 2015-5-29 21:56
哪有半个中文的。截取半个中文就是乱码了。
作者: lizhi    时间: 2015-5-29 22:00
中文汉字占两个字节
作者: wangkai    时间: 2015-5-30 10:51
一个中文占两个字节
作者: 牛兴亮    时间: 2015-5-30 11:50
num = (num%2==0) num : num+1;
应该是这个意思吧
作者: qian0217wei    时间: 2015-5-30 12:35
这是基础自测题上的题目吧!
作者: bin2015    时间: 2015-5-30 13:17
一个中文占两个字节,截取三个乱码了,中文两个字节才对应一个字符
作者: xgd6612    时间: 2015-5-30 13:26
我的基础测试题
package com.itheima ;
/**
10、编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
*/
public class Test10 {

    public static void main(String[] args) {
            
            //调用函数,输出测试
            System.out.println(mySubstring("HM程序员",2));
            System.out.println(mySubstring("HM程序员",4));
            System.out.println(mySubstring("HM程序员",3));
    }
   
    //定义一个方法,接收原始字符串和需要截取的字节数,返回截取到的字符串
    public static String mySubstring(String str,int count) {
            
            //定义一个byte[]
            byte[] bytes = null;
            //获取字节数组时,指定为按GBK编码获取,需要处理不支持GBK的机子上的异常
            try {
                    bytes = str.getBytes("GBK");
            } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            }
            //判断输入的字节个数是不是正整数
            if(count<0)
                    throw new RuntimeException("获取字节个数为负数,错误!");
            //判断输入的字节个数是否大于原始字符串长度,是,则输出原字符串
            else if(count>str.length())
                    return str;
            //判断输入的字节个数是不是奇数
            else if(count>0 && count%2==1) {
                    //是奇数,才判断要获取的最后一个字节是不是汉字的一半,通过负数判断
                    if((byte)bytes[count-1]<0){
                            //是汉字一半,就减一个字节
                            count--;
                    }
            }
            
            //获取要得到的新字节数组
            byte[] newbytes=new byte[count];
            for(int x=0;x<count;x++){
                    newbytes[x]=bytes[x];
            }
            
            //将新字节数组转回字符串,并返回
            String newStr=new String(newbytes);
            return newStr;
    }

}         




上面的问题   汉字占两个字节  ~~  读取是一个字节一个字节的读取 意思就是  读完半个汉字 停止后   要求舍弃这半个汉字
作者: forTomorrow    时间: 2015-5-30 13:47
楼上的题做的挺好,学习了!
作者: zhousuo28    时间: 2015-5-30 21:14
可以放入字节数组,然后一个个的判定,因为汉字占两个字节,第一个字节是负数,如果出现负数了就看他后面还有没有元素,如果有元素就是一个汉字,如果出现负数后而后面没元素了的话就是半个汉字,应该去掉,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2