剑指Offer刷题记录——Offer 05. 替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入:s = "We are happy."
输出:"We%20are%20happy."

值得注意的是,java中字符串是不可变的字符序列,因此改变内容要想办法。

方法一:字符数组(官方答案)
由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。

获得 s 的长度 length
创建字符数组 array,其长度为 length * 3
初始化 size 为 0,size 表示替换后的字符串的长度
从左到右遍历字符串 s
获得 s 的当前字符 c
如果字符 c 是空格,则令 array[size] = '%',array[size + 1] = '2',array[size + 2] = '0',并将 size 的值加 3
如果字符 c 不是空格,则令 array[size] = c,并将 size 的值加 1
遍历结束之后,size 的值等于替换后的字符串的长度,从 array 的前 size 个字符创建新字符串,并返回新字符串

    public String replaceSpace(String s) {
        int length = s.length();
        char[] array = new char[length * 3];
        int size = 0;
        for (int i = 0; i < length; i++) {
            char c = s.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;
    }

方法二:使用可变字符序列StringBuffer或者StringBuilder

使用构造器实例化StringBuffer或者StringBuilder时要注意其容量问题,建议使用带参的new

StringBuffer(int capacity);其中StringBuffer类增加方法是append(xxx)

public String replaceSpace1(String s){
        StringBuffer sbuffer = new StringBuffer(s.length() * 3);
        for (char s2 : s.toCharArray()){
            if (s2 == ' ')
                sbuffer.append("%20");
            else
                sbuffer.append(s2);
        }
        String s1 = new String(sbuffer);
        return s1;
    }

因为函数要返回一个字符串类型,存在String和StringBuffer之间的转换,这里再复习一下:

public static void main(String[] args) {
12         //String -> StringBuffer
13         //创建一个String对象
14         String str = "Hi Java!";
15         System.out.println(str);
16  
17         //方式一:构造方法
18         StringBuffer buffer = new StringBuffer(str);
19         System.out.println(buffer);
20  
21         //方式二:通过append方法
22         StringBuffer buffer2 = new StringBuffer();
23         buffer2.append(str);
24         System.out.println(buffer2);
25  
26         //StringBuffer -> String
27         //创建一个StringBuffer对象
28         StringBuffer buffer3 = new StringBuffer();
29         buffer3.append("Happy birthday Java!");
30         System.out.println(buffer3);
31  
32         //方式一:通过构造方法
33         String str2 = new String(buffer3); 
34         System.out.println(str2);
35          
36         //方式二:通过toString方法
37         String str3 = buffer3.toString();
38         System.out.println(str3);
39     }

方法三:直接调用replace(抖机灵)

public String replaceSpace(String s) { String s1 = s.replace(" ", "%20"); return s1; }

共勉!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值