使用int i,int j,char temp在不增加额外内存的条件下把StringBuilder s = new StringBuilder("this is a book")变成"book a is this".

解决方案 »

  1.   

    转换成ascll码表试试呢
      

  2.   

    //缺点用了length函数
    public static void main(String[] args) {
            int i, j;
            char temp;
            StringBuilder s = new StringBuilder("this is a book");
            i = 0;
            do{
                j = s.indexOf(" ",i);  //end
                if(j > 0)
                    --j;
                else
                    j = s.length() - 1;
                while (i < j){
                    temp = s.charAt(j);
                    s.setCharAt(j,s.charAt(i));
                    s.setCharAt(i, temp);
                    --j;
                    ++i;
                };
                do{
                    ++i;
                }while ( i < s.length() - 1 && s.charAt(i)!=' ');
                ++i;
            }while (i < s.length() );
            System.out.println(s);        j = s.length();
            for (i = 0; i < j/2; ++i)
            {
                temp = s.charAt(j-i-1);
                s.setCharAt(j-i-1,s.charAt(i));
                s.setCharAt(i, temp);
            }
            System.out.println(s);
        }
      

  3.   

    我现在在纠结到底额外的空格" "算不算超出题目的要求范围. 像这句s.indexOf(" ",i)
      

  4.   


    StringBuilder s = new StringBuilder("this is a book");
    int j=s.length();
    for(int i=0;i<s.length();i++){
    if(s.charAt(0)==' '){
    j=s.length()-i-1;
    s.delete(0, 1);
    s.insert(j, ' ');
    }else{
    char temp=s.charAt(0);
    s.delete(0, 1);
    s.insert(j-1, temp);
    }
    }
    System.out.println(s);结果:book a is this
      

  5.   

    不知道面试能查api吗,我之前都没用StringBuilder,一直用StringBuffer
      

  6.   

    让你们见识下什么是最优雅的标准答案,还支持多个空格间隔,呵呵。       StringBuilder s = new StringBuilder("this  is a  book");
            int i=0;
            int j = 0;
            char temp;
            for( ;i<s.length();i++){
             temp = s.charAt(s.length() - 1);
             if(temp == ' '){
             j=i;
             }
             if(s.charAt(j) == ' '){
            j++;
             }
             s.insert(j, temp);
             s.deleteCharAt(s.length() - 1);
            }
            System.out.println("result: " + s.toString());
      

  7.   

    StringBuilder s = new StringBuilder("this  is a  book");
            int i=0;
            int j = 0;
            char temp;
            for( ;i<s.length();i++){
                temp = s.charAt(s.length() - 1);
                if(temp == ' '){
                    j=i;
                }
                if(s.charAt(j) == ' '){
                   j++;
                }
                s.insert(j, temp);
                s.deleteCharAt(s.length() - 1);
            }
            System.out.println("result: " + s.toString());
      

  8.   

    嗯,楼上提的对,虽然差别很细微。StringBuilder s = new StringBuilder("this  is a  book");
    int i = 0;
    int j = 0;
    char temp;
    for (; i < s.length(); i++) {
    temp = s.charAt(s.length() - 1);
    if (temp == ' ') {
    j = i;
    }
    if (s.charAt(j) == ' ') {
    j++;
    }
    s.deleteCharAt(s.length() - 1);
    s.insert(j, temp);
    }
    System.out.println("result: " + s.toString());
      

  9.   


    s.insert(j, temp);
    s.deleteCharAt(s.length() - 1);先插入就增加额外内存了,所以要先delete再insert先插再删?
    StringBuilder初始化长度是参数长度+16,insert只要不超过这个这个值,就不会增加内存
      

  10.   

    既然这样还这么麻烦干嘛,先把StringBuilder清空了,然后在append(book a is this);反正长度都是16.
      

  11.   

    大哥我感觉你说的很有道理,秒杀所有楼上的

    既然这样用 直接大招System.out.print(s.reverse());更简单
      

  12.   

    大哥我感觉你说的很有道理,秒杀所有楼上的

    既然这样用 直接大招System.out.print(s.reverse());更简单我最开始也天真的一位reverse可以拯救一切……但是事实证明:
    1、reverse是把所有的字符全部倒过来(那画面太美,我一直在笑);
    2、reverse()返回的是StringBuilder,不toString会出问题……=_,=|||……
      

  13.   

    题目不是很严谨,严格得说应该是在i,j,temp,s四个变量,不另外增加新变量的情况下,将this is a book改成 book  a is this。
    不然就是5楼的方法,出现 ' ' 也算是不符合要求,delete和insert 看源码 确实是没有 新增 内存