字符串中的空格替换问题(Java版)

解决方式一:时间复杂度为O(n^2)

解决方式二:时间复杂度为O(n)

代码实现:

package string;

public class SpaceStringReplace2 {
    //len为数组大小的总容量
    public static void SpaceReplace(String strOld,int len){
        char[] chs =new char[len];
        char[] ch = strOld.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            chs[i] = ch[i];
        }

        int strOldLen = 0;
        int blackString = 0;
        if(chs==null || len<=0)
        {
            new NullPointerException();
        }

        int i=0;
        while(chs[i]!=‘\0‘){
            strOldLen++;
            if(chs[i]==‘ ‘){
                blackString++;
            }
            i++;
        }
        //将空格转换成%20字符的长度
        int strNewLen = strOldLen + blackString*2;
        if(strNewLen>len){
            new ArrayIndexOutOfBoundsException();
        }

        int indexOfOld=strOldLen;//指向‘\0‘
        int indexOfNew=strNewLen;

        while(indexOfOld>0 && indexOfNew>indexOfOld){
            if(chs[indexOfOld] == ‘ ‘){
                chs[indexOfNew--] = ‘0‘;
                chs[indexOfNew--] = ‘2‘;
                chs[indexOfNew--] = ‘%‘;
            }
            else{
                chs[indexOfNew--] = chs[indexOfOld];
            }
            --indexOfOld;
        }
        for (char c : chs) {
            if(c==‘\0‘){
                break;
            }
            System.out.print(c);
        }
        System.out.println();
    }

    public static void main(String[] args) {
        //StringBuilder str = new StringBuilder("We are happy.");
        long timelast = System.currentTimeMillis();
        String str = "We are happy.";
        SpaceReplace(str,100);//We%20are%20happy.

        long timeafter = System.currentTimeMillis();
        System.out.println(timeafter-timelast);
    }
}

解决方式三JDK自带的字符串分割

代码实现:

package string;

public class SpaceStringReplace {
    public static String SpaceReplace(String strOld){
        String[] split = strOld.split(" ");
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < split.length-1; i++) {
            stringBuilder.append(split[i]).append("%20");
        }
        stringBuilder.append(split[split.length-1]);
        String strNew = stringBuilder.toString();
        return strNew;
    }

    public static void main(String[] args) {
        //StringBuilder str = new StringBuilder("We are happy.");
        String str = "We are happy.";
        System.out.println(SpaceReplace(str));//We%20are%20happy.
    }
}
时间: 2024-08-03 03:35:14

字符串中的空格替换问题(Java版)的相关文章

《剑指Offer》替换空格(将字符串中的空格替换为%20)

题目: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为 We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy. 思路: 这种替换问题要考虑是否会覆盖原字符串,若是在源字符串上直接替换. 看到这个问题我觉得很多人都会想到直接从头开始替换,即遇到空格就将其替换为%20,每次都要将空格后的字符后移两个字节.这种解法的时间复杂度为O(n^2)!!! 另外一种较好的解法是从后往前替换,具体做法是从头遍历计算所有空格数,计算出总的长度. 该解

字符串中的空格替换

题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析: 首先,还是想到简单.原始的方法,从头到尾扫描字符串,遇到每遇到一次空 格,先将空格之后的所有元素移动两个字节,然后将空格替换成"%20".显然这种方法需要大量移动字符.假设字符串的长度是n,每遇到一个空格,需要移动O(n)个字符,因此对含有O(n)个空格的字符串而言,时间复杂度为O(n^2).

面试题5:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 注意从后向前替换,使得时间复杂度为O(n); public class Main { public static void main(String[] args) { Main main01=new Main(); String str=main01.replaceSpace(new StringBuffer("old s

将一个字符串中的空格替换为指定的内容——4

实现一个函数,将一个字符串中的所有空格替换为"%20",例如输入字符串"How beautiful you are!",输出结果应为"How%20beautiful%20you%20are!". 首先,如果另开辟一块空间并且足够将全部空格都替换成"%20",然后一个单词一个单词的拷贝过去,当遇到空格时就放进去"%20",这种低效率的方法肯定是可行的,但很显然不仅效率不高还浪费存储空间,因此,要节省空间就要在

替换字符串中的空格(C++/Java实现)

题意描述:实现一个函数把字符串中的每个空格替换成"20%".例如: 输入:"we are happy" 输出:"we%20are%20happy" 解题思路:(C++实现方法)如果从前往后遍历,遇到空格再将字符向后移动,则假设有O(n)个空格的时间效率就是O(n^2).因此优化的解法就是一次移到位,先遍历一次字符串,可同时得到字符串的长度和字符串中空格的数量,然后对于1个空格用"%20"这3个字符替换,所以可以计算出最终字符串

将字符串中的空格替换为%20

------------------------------------------------------------------------------------------------------ 例如:有字符串we are family,实现后的字符串为we%20are%20family. 如果从前向后,遇空格替换空格,那么family必将向后移动两次:那么我们可以从后向前实现, 先预留足够的空间,先移动family,再移动are,遇空格填充即可. ------------------

剑指offer 66题 -- 将一个字符串中的空格替换成“%20”

class Solution {public: void replaceSpace(char *str,int length) { //变量定义区 int newtv = 0; int oldtv = 0; int spaceNum = 0; //入参有效性判断 if( NULL == str || length <= 0) return; //计算空格数目 int i =0; while(str[i] != '\0') { oldtv++; if(str[i] == ' ') spaceNum

替换字符串中的空格

题目描述: 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 输入: 每个输入文件仅包含一组测试样例. 对于每组测试案例,输入一行代表要处理的字符串. 输出: 对应每个测试案例,出经过处理后的字符串. 样例输入: We Are Happy 样例输出: We%20Are%20Happy -------------------------------------------------

(CSDN迁移)替换字符串中的空格

题目描述 请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. public class Solution { public String replaceSpace(StringBuffer str) { String string = str.toString(); return string.replaceAll(" ", "%20"); }