替换空格

替换空格

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

思想
先把传入的字符串改为字符数组,对字符数组进行遍历,首先对字符串的null值进行处理,其次遇到空格转化为%20,遇到字符直接加上,最后返回字符串。
(注:传入类型为StringBuffer,如果是String,不存在还能在原字符串修改的情况,但是StringBuffer貌似可以,因此,应考虑一种不需要额外内存的办法。)

代码1(case通过率为12.50%)
(没有考虑到空格在开始的情况)

public static String replaceSpace(String str) {
        int length = str.length();
        String strRep = null;
        char[] charRep = new char[length];
        str.getChars(0, length, charRep, 0);
        for (int i = 0; i < charRep.length; i++) {
            System.out.println("charRep["+i+"]="+charRep[i]);

        }
        System.out.println();System.out.println();
        for (int i = 0; i < length; i++) {
            if (charRep[i] == ' ') {
                strRep = strRep + "%20";
            }else if (strRep == null){
                strRep = String.valueOf(charRep[i]);
            }else{
                strRep = strRep + charRep[i];
            }
        }
        return strRep;
    }

代码2

public String replaceSpace(StringBuffer str) {
        if (str.length()<1 || str == null)
            return str.toString();
    	int length = str.length();
        String strRep = null;
        char[] charRep = new char[length];
        str.getChars(0, length, charRep, 0);
        for (int i = 0; i < charRep.length; i++) {
            System.out.println("charRep["+i+"]="+charRep[i]);

        }
        for (int i = 0; i < length; i++) {
            if (strRep == null){
                if (charRep[i] == ' ') {
                    strRep = "%20";
                }else
                    strRep = String.valueOf(charRep[i]);
                continue;
            }
            if (charRep[i] == ' ') {
                strRep = strRep + "%20";
            }else{
                strRep = strRep + charRep[i];
            }
        }
        return strRep;
    }

代码3
(不用多申请其他空间,仅利用原地空间。先判断有多少空格,计算新字符串长度,然后利用双指针,从后往前增加字符串。)

public static String replaceSpace1(StringBuffer str) {
        int blank = 0;
        //先遍历一遍得到空格数
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ' ') {
                blank++;
            }
        }
        int oldLen = str.length();
        //新字符串的长度
        int newLen = oldLen + blank * 2;
        //为新的字符串申请新的长度
        str.setLength(newLen);
        int oldIndex = oldLen - 1;
        int newIndex = newLen - 1;
        while (oldIndex >= 0 && newIndex >= oldIndex) {
            if (str.charAt(oldIndex) == ' ') {
                str.setCharAt(newIndex--, '0');
                str.setCharAt(newIndex--, '2');
                str.setCharAt(newIndex--, '%');
            } else
                str.setCharAt(newIndex--, str.charAt(oldIndex));
            oldIndex--;
        }
        return str.toString();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值