替换空格

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。public class ReplaceSpace {
     public String replaceSpace(StringBuffer str) {         //1
         char[] getstr = str.toString().toCharArray();
         int len = getstr.length;
         StringBuffer sb = new StringBuffer("");
         char m = ‘ ‘;
         for(int i = 0; i < len; i++){
             m = getstr[i];
             if(m == ‘ ‘){
                 sb.append("%20");
             }else{
                 sb.append(m);
             }
         }
            return sb.toString();        //2     return str.toString.replaceAll("\\s","%20");        //3 牛客网上的解法
/*
问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!
问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。
      从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下
      从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
*/int spacenum = 0;//spacenum为计算空格数
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==‘ ‘)
                spacenum++;
        }
        int indexold = str.length()-1; //indexold为为替换前的str下标
        int newlength = str.length() + spacenum*2;//计算空格转换成%20之后的str长度
        int indexnew = newlength-1;//indexold为为把空格替换为%20后的str下标
        str.setLength(newlength);//使str的长度扩大到转换成%20之后的长度,防止下标越界
        for(;indexold>=0 && indexold<newlength;--indexold){
                if(str.charAt(indexold) == ‘ ‘){  //
                str.setCharAt(indexnew--, ‘0‘);
                str.setCharAt(indexnew--, ‘2‘);
                str.setCharAt(indexnew--, ‘%‘);
                }else{
                    str.setCharAt(indexnew--, str.charAt(indexold));
                }
        }
        return str.toString();
        }
     public static void main(String[] args) {
        StringBuffer test = new StringBuffer("we are happy");
        String get = new ReplaceSpace().replaceSpace(test);
        System.out.println(get);
    }
}
时间: 2024-08-26 09:19:14

替换空格的相关文章

【剑指offer】第四题 替换空格

/** * 剑指offer 第4题 替换空格 * 特点:1.先扫描串中的空格数,计算好替换后的长度 * 2.使用双指针,从后面开始向前替换,避免从前开始每次替换后就要移动后面的所有的数据 * 测试用例:特殊:有多个空格 * 错误:数组长度不够,字符串为空 * */ package javaTrain; public class Offer4 { public static void main(String[] args) { String a = "Hello I am Daisy Dong!&

替换空格 4

先遍历每个字符统计空格数 :String.charAt() ? ? 根据空格数计算新的长度 :newLength=oriLength+2*NumOfBlank ? ? 新建一个newLength长度的字符数组tempChars用于存放替换空格之后的字符数组 ? ? 利用System.arraycopy函数将原字符串转换为数组拷贝到新的字符数组tempChars中 ? ? 从新字符数组末尾开始遍历,用一个index1指向新字符数组末尾,用一个index2指向原字符数组末尾所在新字符数组的位置,将原

Pro4 替换空格(java)

注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 1 /* 2 * 剑指offer 替换空格 3 * xsf 4 * */ 5 6 /*开始替换空格的函数,length为原数组的长度,java中length不计算/0*/ 7 class BlankFun{ 8 public String replaceBank(String str) { 9 if(str==null)//输入安全判断 10 return null; 11 //构建一个新的Str

Pro4 替换空格

本题最大的困难是如何在不新建新的数组下完成空格替换,主要考察数组指针的运用 思路:(1)找出字符串空格的长度,从而确定新的子串尾指针的位置所在: (2)通过遍历找出空格,string[indexOfNew--]依次附上%20三个字符,indexOfOriginal-- 注:并没有通过实际指针而是通过字符串下标操作,起始时均指向末尾位置 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 /

java实现——004替换空格

1.创建新的字符串 1 public class T004 { 2 public static void main(String[] args){ 3 System.out.println(replaceBlank("we are happy")); 4 } 5 public static String replaceBlank(String s){ 6 String r = "%20"; 7 String result = ""; 8 for(

【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”

//字符串替换空格:实现一个函数,把字符串里的空格替换成"%20" #include <stdio.h> #include <assert.h> void replace(char *src) { assert(src); int OldLen = 0; //原字符串长度 int NewLen = 0; //新字符串长度 int BlackNum = 0; //空格数量 int NewBack = 0; //新字符串尾部 int OldBack = 0; //原

【c语言】字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”

// 字符串替换空格:请实现一个函数,把字符串中的每个空格替换成"%20". // 例如输入"we are happy.",则输出"we%20are%20happy." #include <stdio.h> #include <assert.h> char* replace(char* p) { char* ret = p; int num = 0; int oldlen = 0; int newlen = 0; char

剑指Offers 题目1510:替换空格

题目1510:替换空格 题解报告:  水题,注意数据,我是用最简单的办法,一扫而替换,判断的时候注意,s[i]!=0,全局数组初始化默认为0,我开始用了strlen(s)判断,超了不少时,哎呀! #include <stdio.h> #include <stdlib.h> #include <string.h> char s[10000001]; int main() { while(gets(s)){ for(int i=0; s[i]!=0; i++){ if(s[

替换空格--《剑指offer》

如题所示,题目很简单,替换空格,将字符串中的空格替换为%20: 即"we are happy"替换成"we%20are%20happy": 如果每当我们遇到一个空格就将字符串向后平移两位,这样复杂度就是O(n2)了,这样的方法是不可取的,按照作者的来说,offer已不足拿到了: 而当我们反向从字符串末尾开始遍历,复杂度仅为O(n),当然前提的是该字符串有足够空间,否则替换会失败. 了解到思想之后程序也就比较简单了,发现自己的与作者的写的也比较类似,就此贴上了...

替换空格-剑指Offer

替换空格 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路 遍历一遍,统计空格数量,扩大相应容量 两个指针,一个指向旧的长度,一个新的长度,从后往前走,一个一个走,遇到空格,right走3个,left走1个 left == right或left == 0就不用接着走了 代码 public class Solution02 { public String replaceSpac