算法:替换空格

题目:

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

 

解法:

1、replaceAll

    public static String replace(String str, String beforeStr, String replacement) {
        String string = str.replaceAll(beforeStr, replacement);
        System.out.println(str);
        return string;
    }

解读:

replace源码:

return Pattern.compile(regex).matcher(this).replaceAll(replacement);

public String replaceAll(String replacement) {
        reset();
        boolean result = find();
        if (result) {
            StringBuilder sb = new StringBuilder();
            do {
                appendReplacement(sb, replacement);
                result = find();
            } while (result);
            appendTail(sb);
            return sb.toString();
        }
        return text.toString();
    }

这个源码的实现使用了 正则表达式,并且同时实现代码里面不停的创建与销毁对象,性能方面很不理想。

更好的解决方法:只需要去寻找可以被替换的部分,然后把不被替换的部分和替换者一个个连接起来就行了。

2、重新开辟新数组,一一替换

    public static String replaceSpace(String str) {
        //先判断是不是空字符串
        if (str.equals("")) {
            return str;
        }

        //1.计算原字符串的空格数
        //1)将字符串转为字节数组
        char[] strArray = str.toCharArray();
        //2)计算空格数
        int spaceNum = 0;
        for (int i = 0; i < strArray.length; i++) {
            if (strArray[i] == ' ') {
                spaceNum++;
            }
        }

        //2.重新开辟新数组,一一填进去。遇到空格就添上相应的替换符
        char[] newStrArray = new char[strArray.length + spaceNum * 2];
        int j = 0;
        for (int i = 0; i < strArray.length; i++) {
            if (strArray[i] != ' ') {
                newStrArray[j] = strArray[i];
                j++;
            } else {
                newStrArray[j] = '%';
                j++;
                newStrArray[j] = '2';
                j++;
                newStrArray[j] = '0';
                j++;
            }
        }
        return new String(newStrArray);
    }

参考:

https://www.cxyxiaowu.com/1438.html

另:

收获1、

所以,

str.equals("")不会报空指针异常。

收获2:new  String()的默认值是""

public String() {
    this.value = "".value;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值