首页 > 试题广场 > 替换空格
[编程题]替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

355个回答

添加回答
推荐
//思路
//1:从前往后插入,这样移动·的次数多不建议
//2:从后往前插入

class Solution {
public:
void replaceSpace(char *str,int length) {
        //遍历一边字符串找出空格的数量
        if(str==NULL||length<0)
            return ;
        int i=0;
        int oldnumber=0;//记录以前的长度
        int replacenumber=0;//记录空格的数量
        while(str[i]!='\0')
            {
               oldnumber++;
               if(str[i]==' ')
                   {
                     replacenumber++;
                   }
                  i++; 
            }
        int newlength=oldnumber+replacenumber*2;//插入后的长度
        if(newlength>length)//如果计算后的长度大于总长度就无法插入
            return ;
        int pOldlength=oldnumber; //注意不要减一因为隐藏个‘\0’也要算里
        int pNewlength=newlength;
        while(pOldlength>=0&&pNewlength>pOldlength)//放字符
            {
              if(str[pOldlength]==' ') //碰到空格就替换
                  {
                     str[pNewlength--]='0';
                     str[pNewlength--]='2';
                     str[pNewlength--]='%';
                     
                  }
               else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置
               {
                    str[pNewlength--]=str[pOldlength];
                   
               }
             pOldlength--; //不管是if还是elsr都要把pOldlength前移
             
           }
        

}
};
编辑于 2015-12-07 18:51:44 回复(240)
while(str.indexOf(" ")>-1){
    str=str.replace(str.indexOf(" "),str.indexOf(" ")+1,"%20");
}
return str.toString();
1、StringBuffer是自带replace方法的,但是没有replaceAll方法
2、有人把StringBuffer转成String再使用String的replaceAll方法,这种方法更简单粗暴。但我觉得这题主要考验你对StringBuffer的熟悉度,所以我还是觉得全部使用StringBuffer的方法比较好
编辑于 2019-05-23 16:07:36 回复(0)
//就是用这个啊,很简单,为什么有些人写的那么复杂
public class Solution {
    public String replaceSpace(StringBuffer str) {
    String strs = str.toString();
        strs = strs.replaceAll(" ","%20");
        return strs;
    }
}
发表于 2019-05-16 09:21:29 回复(0)
public class Solution {
     public String replaceSpace(StringBuffer str) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c == ' ') {
                builder.append("%20");
                continue;
            }
            builder.append(c);
        }
        return builder.toString();
    }
}
时间复杂度O(N),空间复杂度O(N)

发表于 2019-05-07 16:16:23 回复(0)

直接使用stringbuffer中的replace函数即可

public String replaceSpace(StringBuffer str) { for(int i = 0; iif(str.charAt(i)==' ') {
        str.replace(i,i+1,"%20");
    }
}
String newstr = str.toString(); return newstr;
}
发表于 2019-05-06 14:28:32 回复(0)
1.先将StringBuffer转化为String对象,利用StringBuffer的toString()方法
2.再用String对象的replaceAll(",")方法进行替换
发表于 2019-05-05 20:19:21 回复(0)
public class Solution {
    public String replaceSpace(StringBuffer str) {
                String s=str.toString();
        char[]cs=s.toCharArray();
        
        for(int i=0;i<cs.length;i++) {
            if(cs[i]==' ') {
                str.replace(i,i+1,"%20");    //此时cs与str不同了,所以得重新赋值一次
                s=str.toString();//重新赋值
                cs=s.toCharArray();//重新赋值
            }
        }
        String st=str.toString();
        return st;
    }
}

发表于 2019-05-05 19:24:50 回复(0)
用replace就好
public class Solution {
    public String replaceSpace(StringBuffer str) {
    String temp=new String(str);
    return temp.replace(" ","%20");
    }
}

发表于 2019-05-02 12:22:14 回复(0)
public class Solution {
    public String replaceSpace(StringBuffer str) {
         String string=String.valueOf(str);
         String r = string.replaceAll(" ", "%20");
         return r;
    }
}
String是字符串常量,要想修改必须是新定义一个String,把replace之后的结果放进去返回。
编辑于 2019-04-25 14:51:38 回复(0)
public class Main {
    public static String replaceSpace(String str) {
        String S=str.replaceAll(" ","%20");
        return S;
    }
    public static void main(String[] args){
        String str=new String("We Are Happy");
        System.out.println(replaceSpace(str));
        
    }
}
发表于 2019-04-23 17:34:24 回复(1)
public String replaceSpace(StringBuffer str) {
   StringBuffer sb1=new StringBuffer();
   for(int i=0;i<str.length();i++) {
       if(str.charAt(i)==' ') {
            sb1.append("%20");
       }else {
          sb1.append(str.charAt(i));
        }
   }
   return sb1.toString();
}
发表于 2019-04-19 15:24:37 回复(1)
public static String replaceSpace(StringBuffer str) { while (str.indexOf(" ") != -1) { int i = str.indexOf(" ");  str.replace(i, i + 1, "%20");  } return str.toString(); }
发表于 2019-04-18 20:11:11 回复(1)
public static String replaceSpace(StringBuffer str) {
    StringBuffer temp =new StringBuffer();  for (int i= 0; i<str.length();i++){ if ((str.charAt(i))==' '){
            temp.append("%20");  }else {
            temp.append(String.valueOf(str.charAt(i)));  }
    } return String.valueOf(temp); }
发表于 2019-04-18 19:15:08 回复(0)
public class Solution {
    public String replaceSpace(StringBuffer str) {
        //直接调用api
        //return str.toString().replaceAll(" ","%20");
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==' ') sb.append("%20");
            else sb.append(str.charAt(i));
        }
        return sb.toString();
    }
}
发表于 2019-04-18 18:26:47 回复(0)
public class Solution {
     public String replaceSpace(StringBuffer str) {
         if(str==null) {
             return null;
         }
         StringBuffer newStr=new StringBuffer();
         for(int i=0;i<str.length();i++) {
             if(str.charAt(i)==' ') {
                 newStr.append("%20");
             }else {
                 newStr.append(str.charAt(i));
             }
         }
        return newStr.toString();
        }
}
发表于 2019-04-16 22:00:11 回复(0)
发现对语法还是用不熟😂length老是没加()
public class Solution {
    public String replaceSpace(StringBuffer str) {
        int m=0;
        int k=0;
        StringBuffer out = new StringBuffer();
        for(int i = 0;i<str.length();i++){
            if(String.valueOf(str.charAt(i)).equals(" ")){
                m=i;
                out.append(str.substring(k,m));
                out.append("%20");
                k=m+1;
            }
            
        }
        out.append(str.substring(k,str.length()));
        return out.toString();
    }
}
发表于 2019-04-15 22:45:37 回复(0)
public class Solution {
    public String replaceSpace(StringBuffer str) {
        if(str == null || str.toString() == "") {
            return "";
        }
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == ' ') {
                count++ ;
            }
        }
        char res[] = new char[str.length()+count*2] ;
        int p2 = res.length-1;        //指向新字符串最后一个字符
        for (int i = str.length()-1; i >= 0; i--) {
            if(str.charAt(i) != ' ') {
                res[p2] = str.charAt(i);
                p2--;
            }else {
                p2 =  p2-3;
                res[p2+1] = '%';
                res[p2+2] = '2';
                res[p2+3] = '0';
            }
        }
        
        return String.copyValueOf(res);
    }
}

发表于 2019-04-15 17:26:13 回复(0)
# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        #space_num = 0
        string = []
        for i in s:
            # print (i)
            if i==" ":
                #space_num += 1
                i="%20"
            string.append(i)
        #print("".join(string))
        return "".join(string)

发表于 2019-04-15 11:30:01 回复(0)
  • 首先说下未通过思路,
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
最先想到的是遍历整个StringBuffer,使用charAt一一判断是否为' ',如果为' ',那么调用delete函数删除,同时使用insert(i,String)加入到对应的位置中,通过率为87%,未通过的测试用例

        输入 "",应该输出的结果是"%20%20%20",不明白(看一看讨论区有没有解答)。

  • 通过思路:
新建一个StringBuffer对象sb,遍历str,不为空格,使用append追加到对象末尾,如果为空格,分别追加'%',‘2’,’0‘到末尾,最后返回sb.toString()即可
发表于 2019-04-14 17:39:48 回复(0)
public class Solution {
    public String replaceSpace(StringBuffer str) {
         String str2=str.toString();
         StringBuffer str1=new StringBuffer("");
         for(int i=0;i<str2.length();i++)
             if(str2.charAt(i)==' ')
                 str1.append("%20");
             else
                 str1.append(str.charAt(i));
        return str1.toString();
    }
}
发表于 2019-04-14 15:30:21 回复(0)
public class Solution {
    public String replaceSpace(StringBuffer str) {
        String s = str.toString();
        return s.replace(" ","%20");
    }
}

是我太菜了?这样也通过了
发表于 2019-04-09 23:03:05 回复(0)