[剑指offer_05] 替换字符串中的空格

[剑指offer_05] 替换字符串中的空格

1.替换字符串中的空格

题目描述:将一个字符串中的空格替换成“%20”。例如:当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路:从后往前复制,数组长度会增加,或使用StringBuilder、StringBuffer 类

2.使用StringBuffer

/**
 * 解法一:使用StringBuffer
 *
 * @param str 输入字符串
 * @return 输出结果
 */
public static String replaceBlank1(String str){
    if (str == null) {
        return null;
    }

    StringBuffer buffer = new StringBuffer();
    for (int i = 0; i < str.length(); i++) {
        if (String.valueOf(str.charAt(i)).equals(" ")) {
            buffer.append("%20");
        }else {
            buffer.append(str.charAt(i));
        }
    }
    return String.valueOf(buffer);
}

3.使用StringBuilder

/**
 * 解法二:使用StringBuilder
 *
 * @param str 输入字符串
 * @return 输出结果
 */
public static String replaceBlank2(String str) {
    if (str == null){
        return null;
    }
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < str.length(); i++) {
        if (String.valueOf(str.charAt(i)).equals(" ")){
            sb.append("%20");
        }else {
            sb.append(str.charAt(i));
        }
    }
    return String.valueOf(sb);
}

4.使用String自带的replace或replaceAll方法

/**
 * 解法三:使用String自带的replaceAll方法
 *
 * @param str 输入字符串
 * @return 输出结果
 */
public static String replaceBlank3(String str) {
    if (str == null){
        return null;
    }
    return str.replaceAll(" ","%20");
}

5.字符数组替换

/**
 * 解法四:字符数组替换
 *
 * @param str 输入字符串
 * @return 输出结果
 */
public static String replaceBlank4(String str) {
    if (str == null){
        return null;
    }
    int length = str.length();
    char[] array = new char[length * 3];
    int size = 0;
    for (int i = 0; i < length; i++) {
        char c = str.charAt(i);
        if (c == ' ') {
            array[size++] = '%';
            array[size++] = '2';
            array[size++] = '0';
        } else {
            array[size++] = c;
        }
    }
    String newStr = new String(array, 0, size);
    return newStr;
}

6.字符数组从后往前复制

/**
 * 解法五:从后往前复制
 *
 * @param str 输入字符串
 * @return 输出结果
 */
public static String replaceBlank5(String str){
    if (str == null) {
        return null;
    }
    int blankNum = 0;
    int length = str.length();
    int newLength = 0;
    for (int i = 0; i < length; i++) {
        if (str.charAt(i) == ' ') {
            blankNum++;
        }
    }
    // 替换后的字符串长度
    newLength = length + 2 * blankNum;
    char[] newChars = new char[newLength];
    int index = newLength - 1;
    for (int i = length - 1; i >= 0; i--) {
        if (str.charAt(i) == ' ') {
            newChars[index--] = '0';
            newChars[index--] = '2';
            newChars[index--] = '%';
        } else {
            newChars[index--] = str.charAt(i);
        }
    }
    return new String(newChars);
}

7.测试用例

/**
 * 测试Test5
 *
 *  第5题
 *  将一个字符串中的空格替换成"%20"
 *
 * @author smallz
 * @version 1.0
 * @date 2020/3/28 18:03
 */

public class Test5 {
    @Test
    public void test4() {
        String beforeStr = " I can  fly  ";
        System.out.println("解法一:使用StringBuffer, 替换前:" + beforeStr + " 替换后:" + ReplaceBlank4.replaceBlank1(beforeStr));
        System.out.println("解法二:使用StringBuilder,替换前:" + beforeStr + " 替换后:" + ReplaceBlank4.replaceBlank2(beforeStr));
        System.out.println("解法三:使用String自带的replaceAll方法,替换前:" + beforeStr + " 替换后:" + ReplaceBlank4.replaceBlank2(beforeStr));
        System.out.println("解法四:字符数组复制,     替换前:" + beforeStr + " 替换后:" + ReplaceBlank4.replaceBlank3(beforeStr));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值