剑指offer05-替换字符串中的空格

题目要求

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

代码实现

package cn.swordOffer.num05;

/**
 * @author GONG
 * @version 1.0
 * @date 2020/11/25 12:32
 */
public class ReplaceBlankDemo {
    /**
     * 最简单解法:直接用String的replaceAll方法解决问题
     */
    public String replaceSpace(String s) {
        return s.replaceAll(" ", "%20");
    }

    /**
     * 解法一:使用StringBuffer
     */
    public static String replaceBlank01(String input) {
        // 判空
        if (input == null) return null;
        StringBuffer outBuffer = new StringBuffer();
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ' ') outBuffer.append("%20");
            else outBuffer.append(input.charAt(i));
        }
        return outBuffer.toString();
    }

    /**
     * 解法二:使用StringBuilder
     */
    public static String replaceBlank02(String input) {
        // 判空
        if (input == null) return null;
        StringBuilder outBuilder = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ' ') outBuilder.append("%20");
            else outBuilder.append(input.charAt(i));
        }
        return outBuilder.toString();
    }

    /**
     * 解法三:从后往前复制,并且重新创建了一个char数组
     */
    public static String replaceBlank03(String input) {
        // 判空
        if (input == null) return null;

        // 查找字符串中一共有多少个空格
        int blankCount = 0;
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ' ') ++blankCount;
        }

        // 创建一个新的string,利用char[]创建,方便从后往前插入
        int newStringLen = input.length() + blankCount * 2;
        char[] newString = new char[newStringLen];
        int index = newString.length - 1;
        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == ' ') {
                newString[index--] = '0';
                newString[index--] = '2';
                newString[index--] = '%';
            } else newString[index--] = input.charAt(i);
        }
        return new String(newString);
    }


    public static void main(String[] args) {
        String beforeStr = " ab g gt r ";
        System.out.println("解法一:使用StringBuffer, 替换前:" + beforeStr + " 替换后:" + ReplaceBlankDemo.replaceBlank01(beforeStr));
        System.out.println("解法二:使用StringBuilder,替换前:" + beforeStr + " 替换后:" + ReplaceBlankDemo.replaceBlank02(beforeStr));
        System.out.println("解法三:从后往前复制,      替换前:" + beforeStr + " 替换后:" + ReplaceBlankDemo.replaceBlank03(beforeStr));
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值