栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指offer.05.替换空格

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指offer.05.替换空格

替换空格
  • 前言
  • 一、StringBuilder
    • 1、想法
    • 2、源码
  • 二、采用数组
    • 1、源码

前言

算法打卡,替换空格,第一印象可以使用s.replaceAll(" ","%20"),可以向面试官展示你熟练的API操作,但是这样做对你的印象会打打折扣。

一、StringBuilder 1、想法

通过循环遍历的方式,取所有的字符来和空格字符比较,如该位置的字符为空格,则添加“%20”进入stringbuilder,反之,把原来的字符append到stringbuilder。
1)StringBuilder
StringBuffer为了保证线程安全,在StringBuilder的基础上使用了Synchronized锁,而这里的单线程不需要考虑线程安全,这样就加快了处理速度。
2)三目运算符
CPU执行指令存在高速缓存中,有一个指令队列,当使用if…else代码时,先把if中的指令加入队列,而当if不成立时,队列清空,加入else的代码(指令)。但对于三目运算符,则使用把两种可能都加入队列的机制,CPU会执行全部指令,然后根据最后运算出的条件来选择需要的结果。这看起来虽然CPU运算的指令变多,但是减少了等待时间,CPU最擅长的就是计算。

2、源码
public String replaceSpace(String s) {
        //单线程,不用stringbuffer来同步
        StringBuilder result = new StringBuilder();
        for(int i = 0;i < s.length();i++)
            result.append(" ".equals(s.substring(i,i+1))?"%20":s.substring(i,i+1));
        return result.toString();
    }
二、采用数组

用字符数组存作为cache,根据条件缓存该存的字符。最后生成string。

1、源码
public String replaceSpace(String s) {
        int len = s.length();
        char[] cache = new char[len * 3];
        int size = 0;
        for(int i = 0;i < len;i++){
            if(s.charAt(i) == ' '){
                cache[size++] = '%';
                cache[size++] = '2';
                cache[size++] = '0';
            }else{
                cache[size++] = s.charAt(i);
            }
        }
        String result = new String(cache,0,size);
        return result;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号