欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-10 21:55:26
文章目录题目思路:1、解法一:用Java自带的函数str.toString().replace(" ","%20")。2、解法二:在当前字符串上进行替换。题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:1、解法一:用Java自带的函数str.toString().replace(" “,”%20")。public static String replaceSpace(Stri...

题目

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

思路:

1、解法一:用Java自带的函数str.toString().replace()

用Java自带的函数str.toString().replace(" “,”%20")。

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

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

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

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

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

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

 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();
    }

本文地址:https://blog.csdn.net/qq_44895397/article/details/112853675