【剑指Offer题解:java】替换空格

文章目录

    • 题目
    • 思路:
      • 1、解法一:用Java自带的函数str.toString().replace(" ","%20")。
      • 2、解法二:在当前字符串上进行替换。

题目

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

思路:

1、解法一:用Java自带的函数str.toString().replace(" “,”%20")。

public String replaceSpace(StringBuffer str) {
     
        return str.toString().replace(" ", "%20");
    }

2、解法二:在当前字符串上进行替换。

a. 先计算替换后的字符串需要多大的空间,并对原字符串空间进行扩容;

b. 从后往前替换字符串的话,每个字符串只需要移动一次;

c. 如果从前往后,每个字符串需要多次移动,效率较低。

【剑指Offer题解:java】替换空格_第1张图片
代码

 public String replaceSpace(StringBuffer str) {
     
        if (str == null) return null;
        //统计字符串需要扩容的长度(统计空格数量后,空格数量*2+原数量)
        int num = 0;
        for (int i = 0; i < str.length(); i++) {
     
            if (str.charAt(i) == ' ') num++;
        }
        int l = str.length() - 1;//原先长度
        int newL = str.length() + num * 2;//新长度
        str.setLength(newL);//扩容
        int j = newL - 1;
        //从后往前遍历
        while (l >= 0 && j >= 0&& l<=j) {
     
            if (str.charAt(l) == ' ') {
     //如果原来的位置是空格
                str.setCharAt(j--, '0');
                str.setCharAt(j--, '2');
                str.setCharAt(j--, '%');
                //也可以写为str.replace(j-2,j+1,"%20");j-=3;
            }else {
     //如果不是空格,将原先位置的字符顺延
                str.setCharAt(j--,str.charAt(l));
            }
            l--;
        }
        return str.toString();
    }

你可能感兴趣的:(字符串,算法,java)