剑指offer-2、替换空格

题目描述

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

思路及解答

调⽤API函数

java ⾥⾯有可以直接使⽤的函数replace() ,直接写成下⾯这样即可通过。

java 复制代码
public String replaceSpace(StringBuffer str) {
	String result = str.toString().replace(" ","%20");
	return result;
}

使用StringBuilder拼接

使用额外的空间。对字符串进行遍历,然后使用StringBuilder进行字符串的拼接,遇到空格添加%20,没有则直接添加。

java 复制代码
public class Solution {
    public String replaceSpace(StringBuffer str) {
        //如果字符串为空的话,直接返回null
        if(str == null) return null;
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < str.length(); i++){
            if(str.charAt(i) == ' '){
                sb.append("%20");
            }else{
                sb.append(str.charAt(i));
            }
        }
        return sb.toString();
    }
}

但是这里用到了额外的空间,额外用到StringBuilder进行存储

不使用额外空间

不使用额外的空间,那么我们只能在原String上进行修改了:

  1. 将字符串转换成为字符数组,遍历⼀次,统计出空格的个数。
  2. 对数组进行扩容,保证空格替换成%20有足够的空间:初始化的⼤⼩ = 原来的字符数组⻓度 + 空格⻓度 x 2
  3. 遍历⼀次,复制,当不为空格时直接复制,当为空格时,则把 %20 这三个字符复制过去。
java 复制代码
public class Solution {
	public String replaceSpace(StringBuffer str) {
		// 转换成为字符数组
		char[] originChars = str.toString().toCharArray();
		int spaceNum = 0;
		// 计算出空格的个数
		for (int i = 0; i < originChars.length; i++) {
			if (originChars[i] == ' ') {
				spaceNum++;
			}
		}
		// 新字符数组的⻓度
		int newCharsLength = originChars.length + 2 * spaceNum;
		int newStrIndex = 0;
		for (int index = 0; index <= originChars.length - 1; index++) {
			if (originChars[index] != ' ') {
				// 直接复制
				newChars[newStrIndex++] = originChars[index];
			} else {
				// 空格则需要复制三个字符
				newChars[newStrIndex++] = '%';
				newChars[newStrIndex++] = '2';
				newChars[newStrIndex++] = '0';
			}
		}
		// 转成字符串
		return new String(newChars);
	}
}
相关推荐
皮皮林55110 分钟前
强烈建议你不要再使用Date类了!!!
java
做一位快乐的码农36 分钟前
基于Spring Boot和Vue电脑维修平台整合系统的设计与实现
java·struts·spring·tomcat·电脑·maven
77qqqiqi37 分钟前
mp核心功能
java·数据库·微服务·mybatisplus
junjunyi1 小时前
高效实现 LRU 缓存机制:双向链表与哈希表的结合
java·哈希表·双向链表
Dcs1 小时前
网站响应提速60%的秘密:边缘计算正重构前端架构
java
CodeCraft Studio2 小时前
国产化Excel处理组件Spire.XLS教程:使用 Java 将 CSV 转换为 Excel
java·python·excel
鲁Q同志2 小时前
java导入pdf(携带动态表格,图片,纯java不需要模板)
java·开发语言·pdf
张人玉2 小时前
c#抽象类和接口的异同
java·jvm·c#
平生不喜凡桃李3 小时前
Linux 线程概念与控制
java·linux·运维