编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

解决方案 »

  1.   

    System.out.println("喊a的ss".substring(0,1));
    System.out.println("喊a的ss".substring(0,2));
    System.out.println("喊a的ss".substring(0,3));
    System.out.println("喊a的ss".substring(0,4));
    直接截取就好了
      

  2.   

    回2楼的朋友,substring()方法截取 把汉字也当作一个字节来处理了,比如你上面的输出为
    喊a
    喊a的
    喊a的s
    而题目要求是输出

    喊a
    喊a
      

  3.   

    回2楼的朋友,substring()方法截取 把汉字也当作一个字节来处理了,比如你上面的输出为

    喊a
    喊a的
    喊a的s
    而题目要求是输出
    ?

    喊a
    喊a
      

  4.   

    用subString()然后取最后一个字符用Character类的isLetterOrDigit()
    判断
      

  5.   

    public String substring(String str, int toCount) {
        int reInt = 0;
        String reStr = "";
        if (str == null)
          return "";
        char[] tempChar = str.toCharArray();
        for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {
          String s1 = str.valueOf(tempChar[kk]);
          byte[] b = s1.getBytes();
          reInt += b.length;
          reStr += tempChar[kk];
        }
        
        return reStr;
      }
      

  6.   

    我检查了一下
    public class Test2{
    public String substring(String str, int toCount) {
        int reInt = 0;
        String reStr = "";
        if (str == null)
          return "";
        char[] tempChar = str.toCharArray();
        for (int kk = 0; (kk < tempChar.length && toCount > reInt); kk++) {
          String s1 = str.valueOf(tempChar[kk]);
          byte[] b = s1.getBytes();
          reInt += b.length;
          reStr += tempChar[kk];
        }
        
        return reStr;
      } public static void main(String[] arg){
    Test2 t =new Test2();
    System.out.println(t.substring("test我dd",4));
    System.out.println(t.substring("test我dd",5));
    }
    }打印出  test
            test我
    并没有解决汉字编码问题
    我觉得应该有一个判断汉字的语句
      

  7.   

    String stest="喊a的ss";
    byte[] ss=stest.getBytes();
    for(int i=0;i<ss.length;i++)
       System.out.println(""+i+":"+ss[i]);
    可以看见汉字占2个字节,而且高位是1,打出来是负的,判断下就ok了
      

  8.   

    是啊
    很多人都是用substring 方法 但是并没有符合题目要求啊
      

  9.   

    呵呵,这个方法可行!
    汉字的unicode范围是多少啊?
      

  10.   

    public class StringTest { /**
     * @param args
     */
    public static String subString(String str,int count)
    {
    byte []nstr=new byte[count];
    byte[] ss=str.getBytes();
    for(int i=0;i<count;i++)
    {
    if(ss[i]<0&&(i+1)<count)
    {
    nstr[i]=ss[i];
    nstr[i+1]=ss[i+1];
    i=i+1;
    }
    else
    if(ss[i]<0&&(i+1)>count)
    {i=i+1;}

    if(ss[i]>0)
    {nstr[i]=ss[i];}


    }
    return new String(nstr);
    }
    public static void main(String[] args) {
    // TODO 自动生成方法存根

    System.out.println(StringTest.subString("hoho我爱玩龙族hoho",13));
    }}结果:hoho我爱玩龙
      

  11.   

    public Stirng cutString(String str,int count){
    byte[] bytes=str.getbytes();
    char[] chars=new String(bytes,0,count).toCharArray;
    char[] chars2=new String(bytes,0,count+1).toCharArray;if(chars.length==chars2.length)
    return new String(str,0,subString(count-1));
    else 
    return new String(str,0,subString(count));
    }
      

  12.   

    public static void main(String args[]){
    String s = "我爱abc你";
    byte[] b = s.getBytes(); int n = 5;  //这个假设为输入的数字
    byte[] bb = new byte[n];
    for(int j = 0;j<n;j++){
    bb[j]=b[j];
    }
    String ss = new String(bb);
    System.out.println(ss);
    }
      

  13.   

    答案都太复杂了吧哈哈。我的最容易哟。只有半个字的BYTE是不会被显示出来的
      

  14.   

    getBytes方法 获得的数组中 负数是中文 可以判断
      

  15.   

    public static String subString(String args,int length){
         if(length>args.length())
         length=args.length();
         String rPut="";
         byte[] b=args.getBytes();
         if(length/2!=0){
         if(b[length]<0)
         length=length-1;
         }
         rPut=new String(b,0,length);
         return rPut;
        }
      

  16.   

    public class myclass {
        public static void main(String[] argvs){
            String  mychar = "abc我" ;
            int myint = 5;//默认值
            myclass own = new myclass();
            own.prints(mychar,myint);
        }
        public void prints(String str,int temp){
            byte[] mybyte = str.getBytes();
            
            if(temp > mybyte.length){
                System.out.print(str);
                return;
            }
            byte[] tempbyte = new byte[temp];
            int i=0;
            for( ; i < temp-1 ; i++){
                tempbyte[i] = mybyte[i];
            }
            if(mybyte[i]>=0){
                tempbyte[i]=mybyte[i];
            }
            else if(mybyte[i-1]<0){
                tempbyte[i]=mybyte[i];
            }
           
            System.out.println(new String(tempbyte));
        }
    }汉字的两个字节都是负数
      

  17.   

    public static String checkString(String s,int n){
    byte[] temp=s.getBytes();
    byte[] subString=new byte[n];
    int k=0;
    for(int i=0;i<n;i++){
    if(temp[i]<0&&i+1==n){
    for(int j=i+1;j>0;j--){
    if(temp[j]<0)
    k++;
    else
    break;
    }
    System.out.println(k);
    if(k%2==0)
    subString[i]=temp[i];
    }
    else
    subString[i]=temp[i];
    }
    return new String(subString).trim();
    }
    public static void main(String[] args){
    System.out.println(checkString("你好aaa哈",1));
    System.out.println(checkString("你好aaa哈",1));
      

  18.   

    直接用unicode编码不就完事儿了么?搞这么复杂干嘛?