首页 > 试题广场 > 替换空格
[编程题]替换空格
  • 热度指数:1527707 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
推荐
//思路
//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 回复(306)
public class Solution {
    public String replaceSpace(StringBuffer str) {
        String s1 = str.toString();
        return s1.replace(" ","%20");
    }
}
注意:输入是StringBuffer而不是String,这两个类型的字符串存在用法上的小区别,String.replace()方法,传入(要替代的内容,替代之后的内容)而StringBuffer.relpace()需要传入(替代的位置起,替代的位置止,替代之后的内容)。所以根据题意现将输入的字符串类型进行转换,再使用String的replace操作。 

发表于 2020-05-31 22:01:45 回复(0)
import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String stri = scan.nextLine();
        StringBuffer str = new StringBuffer(stri);
        System.out.println("替换后的字符串为: " + Solution.replaceSpace(str));
    }

    public static String replaceSpace(StringBuffer str) {
        String s1 = str.toString();
        String s2 = s1.replaceAll(" ",
                "%20");
        return s2;
    }
}


发表于 2020-05-19 23:03:35 回复(0)
先遍历一遍,碰到空格追加两个占位符;
第二次从后往前遍历,碰到空格就替换;
public class Solution {
    public String replaceSpace(StringBuffer str) {
    	int len1=str.length()-1;
        for(int i=0;i<=len1;i++){
            if(str.charAt(i)==' ') str.append("  ");
        }
        int len2=str.length()-1;
        while(len1>=0&&len2>len1){
            char c=str.charAt(len1--);
            if(c==' '){
                str.setCharAt(len2--,'0');
                str.setCharAt(len2--,'2');
                str.setCharAt(len2--,'%');
            }else{
                str.setCharAt(len2--,c);
            }
        }
        return str.toString();
    }
}


发表于 2020-05-17 22:33:32 回复(0)
    String s = str.toString();
        char [] c=s.toCharArray();
        StringBuffer s4=new StringBuffer();
        for(char c1:c) {
            if(c1!=' ') {
                s4.append(c1);
            }else {
                s4.append("%20");
            }
        }
        
        
        return s4.toString();


直接char 类型替换,但是数据量如果过大的话,可能会导致程序崩溃
发表于 2020-05-12 16:17:12 回复(0)
将字符串按空格拆分,但拆分时,如果最后一个为空格,默认会忽略,所以要进行判断,判断的依据是在后面随便添加一个不为空格的字符串,如果前后两个字符串相等则说明最后没有空格,反之则有空格
 public static String replace(StringBuffer str) {
		// String s1 = new String(str);
		// String b = s1.replaceAll("\\s","%20");
		// return b;
		String s1 = new String(str);
		String d = "d";
		String a = "%20";
		String[] arr = s1.split("\\s");
		String b = "";
		for (int i = 0; i < arr.length; i++) {
			b += arr[i];
			if (i < arr.length - 1) {
				b += a;
			}
		}
		if ((s1 + d).split("\\s").length != s1.split("\\s").length) {
			b += a;
		}
		return b;
	}

}

发表于 2020-04-24 10:25:01 回复(0)
无需计算长度。。。直接换即可,觉得慢可以换StringBuilder
public class Solution {
    public String replaceSpace(StringBuffer str) {
        StringBuffer res=new StringBuffer();
        if(str==null||str.length()==0)return str.toString();
        String s=str.toString();
        for(int i=0;i<str.length();i++){
            char c=s.charAt(i);
            if(c==' ')res.append("%20");
            else {
                res.append(c);
            }
        }
        return res.toString();
    }
}


发表于 2020-04-18 19:22:56 回复(0)
package 剑指Offfer;

public class 替换空格_me {
    public String replaceSpace(StringBuffer str) {
        String source = str.toString();
        char[] charArray = source.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(char ch : charArray) {
            if(ch == ' ') {
                sb.append("%20");
            }else {
                sb.append(ch);
            }
        }
        return sb.toString();
    }
}

发表于 2020-04-17 21:16:27 回复(0)


public String replaceSpace(StringBuffer str) { char[] chars = new char[str.length()];  str.getChars(0, str.length(), chars, 0);  StringBuffer stringBuffer = new StringBuffer();  for (int i = 0; i < chars.length; i++) { //判断是否是空格  if (chars[i] == " ".charAt(0)) {
            stringBuffer.append("%20");  } else {
            stringBuffer.append(chars[i]);  }
    } return stringBuffer.toString(); }
发表于 2020-04-16 23:36:34 回复(0)
public static String replaceSpace(StringBuffer str) {
        for(int i=0;i<str.length();i++)
            if(str.charAt(i)==' ') {
                str.replace(i, i+1, "%20");
                i+=2;
            };
        return    str.toString();
    }

就这几行就通过了
发表于 2020-04-15 16:39:09 回复(0)
我使用的是新造一个字符串,然后遇到空格就添加题目要求的,建议使用StringBuilder类
发表于 2020-04-15 14:15:34 回复(0)
public class Solution {
    public String replaceSpace(StringBuffer str) {
        if(str == null) return null;
        
        String s = str.toString();
        String t[] = s.split(" ",-1);
        String res = "";
        for(int i=0;i<t.length;i++){
            if(i==t.length-1) res+=t[i];
            else res+=(t[i]+"%20");
        }
        return res;
    }
}

发表于 2020-04-15 12:16:25 回复(0)
public class Solution {
    public String replaceSpace(StringBuffer str) {
        String sti=str.toString();
        String s = sti.replaceAll("[ ]" , "%20");
        return s;
    }
}
发表于 2020-04-14 22:56:47 回复(0)
import java.util.*;
public class Replacement {
    public String replaceSpace(String iniString, int length) {
        // write code here
        char[] array = iniString.toCharArray();
        String reg = " ";
        String tmp = "%20";
        return iniString.replaceAll(reg,tmp);
        
    }
}
发表于 2020-04-13 23:14:21 回复(0)
利用StringBuffer的replace方法
public class Solution {
    public String replaceSpace(StringBuffer str) {
        for(int i = 0; i < str.length(); i++){
            if(str.charAt(i) == ' ')
                str.replace(i, i + 1, "%20");
        }
        return str.toString();
    }
}

小知识:
length是数组的长度
length()是字符串的长度
size()是List集合的大小

发表于 2020-04-10 11:14:28 回复(0)
用的java,然后两个思路,一个直接用String自带的replaceAll,一个常规遍历一遍,用一个备用数组.
第一种: return str.toString().replaceAll("\\s","%20");
第二种:
public class Solution {
    public String replaceSpace(StringBuffer str) {
        String ss = str.toString();
        String result=""; //注意初始化,否则后面用不了
        for(int i=0;i<ss.length();i++){
            char c = ss.charAt(i);
            if(c == ' '){
                result += "%20";
            }else{
                result += c;
            }
        }
        return result;
    }
}



发表于 2020-04-08 20:20:00 回复(0)
思路:对于长度有变化的str,思考灵活使用新建StringBuilder后的append方法
public class Solution {
    public String replaceSpace(StringBuffer str) {
        StringBuffer str2 = new StringBuffer();
        for(int i = 0;i <str.length(); i++ ){
            if(str.charAt(i) == ' ')
                str2.append("%20");
             else
                 str2.append(str.charAt(i));
        }
        return str2.toString();
    }
}
// 脑子被list和set糊住了,再次写的时候,把获取对应位字符的方法写成了get,应该是charAt
// 单引号自动生成char类型,双引号自动生成字符串,一定要注意
// char是基本类型,可以使用==


编辑于 2020-04-14 21:59:25 回复(0)
好像没说不让用现有的方法吧???
public class Solution {
    public static String replaceSpace(StringBuffer str) {
        String strr = str.toString().replace(" ","%20");
        return strr;
    }
}


发表于 2020-04-07 17:58:04 回复(1)