** 
* 写一个方法  String left(String str ,int n) str字符串中可能包含中文,中文是2bytes,实现的功能是 
* 如:“中abc12” n=4  则该方法返回“中ab”  “中abc国a” n=6 则返回“中abc”中文是一半时不返回  
* @author Fee Share 
*/ 
public class split67L {
    public static String left(String str, int index){
        char[] c = str.toCharArray();
        int in=0;
        for(int i=0;i<c.length;i++)
        {
            if(c[i]>255)
            {
                in+=2;
            }else
            {
                in++;
            }
            if(in==index)
            {
                return(str.substring(0,i+1));
            }else if(in>index)
            {
                return(str.substring(0,i));
            }
        }
        return null;
    }
}
我不知道255啥意思?数组c中打印出来不是int型的呀,怎么比较?是不是in只是根据题目的意思,是汉字加2是字母加一,跟自节无关?

解决方案 »

  1.   

    unicode小于256的是半角字符.(不应该是是255)c数组是char类型,char在运算时要转为int类型的,所以int类型的数据能参与的运算,char全可以参与.汉字占两个字节,半角字符只占一个字节.
      

  2.   

    java中的字符都是unicode编码的,大于255是中文字符为两个字节
      

  3.   

    char[] c = str.toCharArray(); 
    这个就是把字符串转成数组。
     if(c[i]>255) 
    判断是字母还是中文,255就是asii码我理解是
      

  4.   

    c[i]在比较的时候是不是就转换成unicode编码的,unicode编码的与字节有啥关系没?字符也占两个字节呀!
      

  5.   

    char和int类型比较的时候会把两者都转化成int
    然后再来比较
      

  6.   

    java中的字符都是unicode编码的char在运算时要转为int类型的,所以int类型的数据能参与的运算char大于255是中文字符为两个字节.注意是两个字节
      

  7.   

    java中字符串都是unicode编码,但是unicode是定长编码,半角和全角都是2个字节啊,不甚明白啊
      

  8.   


    不管是否定长,一定是一个具体数值,这儿比较的是数的大小,没有涉及它占几个字节。当这个数值>255时,那就是超出Ascii的范围是Unicode了。
      

  9.   

    char是两个字节的
    如LS说的
    char可以和int转换
    一个字节是最大是255了
    就是说char数组里的最大是两个字节的
    小于255的就是一个字节了
    也就是大家说的半角和全角了这是给大家提个醒,以后java传输字符的时候要小心
      

  10.   

    String left(String str ,int n)
    {
     String s;
     byte a[] = s.getBytes("GBK");
    return new String(a,0,n,"GBK");
    }
      

  11.   

    汉字必须是取两个字节才能正常显示,所以遇到char的编码大于255时,表明该字符是汉字,此时根据题目要求要么取两个字符,要么不取。若是英文字符,就可以单独取一个字节,它不影响显示,因为题目就是要求截取自定长度的字节
      

  12.   

    java中字符串unicode编码的问题
      

  13.   

    public class split67L { 
        public static String left(String str, int index){ 
            char[] c = str.toCharArray();//将值传递过来的字符串chr转换成字符数组 
            int in=0; //记录字节数,初始化为0
            for(int i=0;i <c.length;i++) //循环字符数组中的元素
            { 
                if(c[i]>255)//判断是否为中文。。中文的asc码大于255,但是中文的时候字节数加2,1个中文两个字节
                { 
                    in+=2; 
                }else 
                { 
                    in++; //不是中文则加1 这样执行下来。得到的就是总的字节数
                } 

                if(in==index) //当字节数==要求截取的数的时候。说明刚好读完。跳出left方法
                { 
                    return(str.substring(0,i+1)); //截取返回0-i之间的字符
                }else if(in>index) //读取的时候当读到一个中文字符的时候。。这个时候字节数加2而,而要求的index字节数为in-1;这个时候应该放弃第i个字符的读取.
                { 
                    return(str.substring(0,i));//截取返回0-(i-1)之间的字符

                } 
            } 
            return null; 
        } 
    } class TiaoShi 
    {
    public static void main(String[] args) 
    {
    split67L a=new split67L();
    System.out.println(a.left("中abc国aa国aaaccdd",10));
    }
    }
      

  14.   


    大于255不一定是中文,中文的unicode码范围0X4E00 -----0X9FA5
      

  15.   

    因为java采用的是unicode编码, 故不管是英语字母还是汉字, 存储时都会占用两个字节.所以才会有了程序中的判断.255之前的是ascii码, 包括英文大小写字母, 数字还有标点符号(半角)以及一些无法显示的特殊字符.
      

  16.   

    夸张点说,几乎只要上CSDN就能看到类似这样的帖子.