替换空格

题目描述

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


思路分析

  1. 用动态的StringBuffer或者StringBuilder类

    String适合于不改变内容的字符串,该情况String最快。
    若字符串内容经常需要改变,在不考虑线程时,StringBuilder > StringBuffer > String;考虑线程时候用StringBuffer。

public class ReplaceBlank2 {
    public static String ReplaceBlank2(String str)
    {
        if(str == null || str.length()<=0)
            return null;
        StringBuffer sb = new StringBuffer();
        for(int i = 0;i<str.length();i++)
        {
            if(str.charAt(i)==' ')
                sb.append("%20");
            else sb.append(str.charAt(i));
        }
        return sb.toString();
    }
    public static void main(String[] args)
    {
        String in1 = "we are happy.";
        String in2 = null;
        String in3 = "";
        String in4 = " ";
        String in5 = "wearehappy.";

        System.out.println("out1:"+ReplaceBlank2(in1));
        System.out.println("out2:"+ReplaceBlank2(in2));
        System.out.println("out3:"+ReplaceBlank2(in3));
        System.out.println("out4:"+ReplaceBlank2(in4));
        System.out.println("out5:"+ReplaceBlank2(in5));

    }
  1. 从后向前替换

    替换字符串中的空格,若从前往后替换,每次遇到空格,就需要把后面的字符都位移一次。考虑从后往前替换。

    • 先计算出新字符串的长度(原字符串长度+空格数*2),开辟该大小的字符数组,
    • 辅助两个指针(下标),left指向原字符串末尾,right指向新字符串末尾。
    • 从后向前遍历原字符串,遇到空格则right左移三个并补充上%20,left左移一个;遇到非空格则复制到right处,left和right左移一个。
    • 注意边界判断

    注意:合并两个有序数组,字符串中空格替换,高效方法:从后向前复制,使用两个指针,可以减少移动次数。

代码


public class ReplaceBlank {
    public static String ReplaceBlank(String str)
    {
        if(str == null || str.length() <= 0)
            return null;

        int blankNum = 0;
        for(int i = 0; i<str.length();i++)
        {
            if(str.charAt(i) == ' ')
                blankNum++;
        }

        int newLength = str.length() + 2*blankNum;
        char[] newChar = new char[newLength];
        int left = str.length() - 1;
        int right = newLength - 1;
        for(;left>=0;left--)
        {
            if(str.charAt(left)==' ')
            {
                newChar[right--] = '0';
                newChar[right--] = '2';
                newChar[right--] = '%';
            }
            else newChar[right--] = str.charAt(left);
        }
        return new String(newChar);
    }
    public static void main(String[] args)
    {
        String in1 = "we are happy.";
        String in2 = null;
        String in3 = "";
        String in4 = " ";
        String in5 = "wearehappy.";

        System.out.println("out1:"+ReplaceBlank(in1));
        System.out.println("out2:"+ReplaceBlank(in2));
        System.out.println("out3:"+ReplaceBlank(in3));
        System.out.println("out4:"+ReplaceBlank(in4));
        System.out.println("out5:"+ReplaceBlank(in5));

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值