编程进阶网编程进阶网
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 基础组成体系
  • 程序编程原理
  • 异常和IO系统
  • 六大设计原则
  • 设计模式导读
  • 创建型设计模式
  • 结构型设计模式
  • 行为型设计模式
  • 设计模式案例
  • 面向对象思想
  • 基础入门
  • 高级进阶
  • JVM虚拟机
  • 数据集合
  • Java面试题
  • C语言入门
  • C综合案例
  • C标准库
  • C语言专栏
  • C++入门
  • C++综合案例
  • C++专栏
  • HTML
  • CSS
  • JavaScript
  • 前端专栏
  • Swift
  • iOS入门
  • 基础入门
  • 开源库解读
  • 性能优化
  • Framework
  • 方案设计
  • 媒体音视频
  • 硬件开发
  • Groovy
  • 常用工具
  • 大厂面试题
  • 综合案例
  • 网络底层
  • Https
  • 网络请求
  • 故障排查
  • 专栏
  • 数组
  • 链表
  • 栈
  • 队列
  • 树
  • 递归
  • 哈希
  • 排序
  • 查找
  • 字符串
  • 其他
  • Bash脚本
  • Linux入门
  • 嵌入式开发
  • 代码规范
  • Markdown
  • 开发理论
  • 开发工具
  • Git管理
  • 百宝箱
  • 开源协议
  • 技术招聘
  • 测试经验
  • 职场提升
  • 技术模版
  • 关于我
  • 目标清单
  • 学习框架
  • 育儿经验
  • 我的专栏
  • 底层能力
  • 读书心得
  • 随笔笔记
  • 职场思考
  • 中华历史
  • 经济学故事
  • 01.翻转字符串
  • 02.字符串替换空格
  • 03.把字符串转换成整数
  • 04.回文字符串
  • 05.字符串的排列
  • 06.第一个只出现一次的字符
  • 07.把字符串转换成整数
  • 08.翻转单词顺序
  • 09.左旋转字符串
  • 10.表示数值字符串
  • 11.查找最长公共前缀
  • 12.第一个不重复的字符

02.字符串替换空格

目录介绍

  • 01.题目要求
  • 02.问题分析
  • 03.实例代码

01.题目要求

  • 问题如下所示:
    • 请实现一个函数,把字符串中的每个空格替换成"%20"
  • 示例 :
    • 例如“We are happy.”,则输出“We%20are%20happy.”。

02.问题分析

  • 先判断字符串中空格的数量。根据数量判断该字符串有没有足够的空间替换成"%20"。
  • 如果有足够空间,计算出需要的空间。根据最终需要的总空间,维护一个指针在最后。从后到前,遇到非空的就把该值挪到指针指向的位置,然后指针向前一位,遇到“ ”,则指针前移,依次替换为“02%”。

03.实例代码

  • 第一种解决代码
    public static String replace(String str) {
        int length = str.length();
        StringBuffer result = new StringBuffer();
        for (int i = 0; i < length; i++) {
            char b = str.charAt(i);
            if (String.valueOf(b).equals(" ")) {
                result.append("%20");
            } else {
                result.append(b);
            }
        }
        return result.toString();
    
    }
    
    public static String replace(StringBuffer str) {
        return str.toString().replaceAll("\\s", "%20");
    }
  • 第二种解决代码
    public class Test {  
        /** 
         * 请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.“,则输出”We%20are%20happy.“。 
         * 
         * @param string     要转换的字符数组 
         * @param usedLength 已经字符数组中已经使用的长度 
         * @return 转换后使用的字符长度,-1表示处理失败 
         */  
        public static int replaceBlank(char[] string, int usedLength) {  
            // 判断输入是否合法  
            if (string == null || string.length < usedLength) {  
                return -1;  
            }  
      
            // 统计字符数组中的空白字符数  
            int whiteCount = 0;  
            for (int i = 0; i < usedLength; i++) {  
                if (string[i] == ' ') {  
                    whiteCount++;  
                }  
            }  
      
            // 计算转换后的字符长度是多少  
            int targetLength = whiteCount * 2 + usedLength;  
            int tmp = targetLength; // 保存长度结果用于返回  
            if (targetLength > string.length) { // 如果转换后的长度大于数组的最大长度,直接返回失败  
                return -1;  
            }  
      
            // 如果没有空白字符就不用处理  
            if (whiteCount == 0) {  
                return usedLength;  
            }  
      
            usedLength--; // 从后向前,第一个开始处理的字符  
            targetLength--; // 处理后的字符放置的位置  
      
            // 字符中有空白字符,一直处理到所有的空白字符处理完  
            while (usedLength >= 0 && usedLength < targetLength) {  
                // 如是当前字符是空白字符,进行"%20"替换  
                if (string[usedLength] == ' ') {  
                    string[targetLength--] = '0';  
                    string[targetLength--] = '2';  
                    string[targetLength--] = '%';  
                } else { // 否则移动字符  
                    string[targetLength--] = string[usedLength];  
                }  
                usedLength--;  
            }  
      
            return tmp;  
        }  
    }
贡献者: yangchong211
上一篇
01.翻转字符串
下一篇
03.把字符串转换成整数