【剑指offer】面试题5:替换空格(JAVA)

/*请实现一个函数,把字符串 s 中的每个空格替换成"%20"。*/
/**
 * 1.在原有的字符串上进行替换
 * 2.创建新字符串进行替换
 */

package sword;

/**
 * @author PangWanjia
 * @date 2021/3/25 20:21
 */
public class test05 {
    //在原有的空间上替换,先遍历计算空格数量,得到需扩展的数组大小。然后从后向前移动。
    public static StringBuffer replaceSpace(StringBuffer s){
        //考虑异常情况
        if (s == null) return null;

        int num = 0;
        int k = s.length();     //要先记一下字符串大小,在for循环中改变了
        //根据空格数量扩充字符串大小
        for(int i = 0;i < k;i++){
            if(s.charAt(i) == ' '){
                num++;
            }
        }
        s.setLength(s.length()+num*2);
        //移动元素
        int j = s.length() - 1;      //指向扩充后的字符串最后一项
        for(int i = k - 1;i >= 0;i--){
            if(s.charAt(i) != ' ') s.setCharAt(j--,s.charAt(i)); //若非空格,复制到j指针处
            else{
                s.setCharAt(j--,'0');
                s.setCharAt(j--,'2');
                s.setCharAt(j--,'%');
            }
        }
        return s;
    }
    //创建新空间
    public static String replaceSpace2(String s) {
        String temp = "";
        for(int i = 0;i<s.length();i++){
            if(s.charAt(i) == ' ')     temp = temp + "%20";
            else    temp = temp + s.charAt(i);
        }
        return temp;
    }
    public static void main(String[] args) {
        String s1 = "We are happy.";
        StringBuffer s = new StringBuffer("We are happy.");
        System.out.println(s);
        System.out.println(replaceSpace2(s1));
        System.out.println(replaceSpace(s));
    }
}

算法很简单,但是JAVA修改String太麻烦了……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值