【剑指offer】替换空格 多种解法

本文介绍三种在Java中将字符串中的空格替换为'%20'的方法,包括使用Java自带方法、定义新StringBuffer进行替换及面向过程的传统替换算法。详细比较了不同方法的运行时间和内存占用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一、用java自带方法

运行时间:27ms  占用内存:9548k
	public static String replaceSpace(StringBuffer str) {
		// 方法一、偷懒解法:用java自带库
		return str.toString().replace(" ", "%20");
	}

方法二、新定义一个StringBuffer,碰到空格就替换后追加。

运行时间:28ms 占用内存:9512k
public static String replaceSpace2(StringBuffer str) {
		// 方法二、新定义一个数组,碰到空格就追加符号,否则就追加原字母本身。
		StringBuffer sBuffer = new StringBuffer();
		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (c == ' ') {
				sBuffer.append("%20");
			} else {
				sBuffer.append(c);
			}
		}
		return sBuffer.toString();
	}

方法三:最传统最面向过程的方法。 

运行时间:18ms   占用内存:9548k

注意的细节:1.新开辟的空间,应该是原字符串长度加上二倍的空格个数。

2.String类型不能改变内容,所以不能作为结果的中转存储。因为不能逐位更改字符。所以要用个StringBuffer先做逐位替换,最后再转为String。(也可以不新定义字符串,直接用原字符串)

3.虽然StringBuffer可变长,但是要用下标取数时,还是需要提前将长度扩充。

public static String replaceSpace3(StringBuffer str) {
		//方法三、最面向过程的方法。不依赖java现有的方法。真正的替换。
		//从前向后统计空格个数,从后往前替换。
		int lenOld = str.length();
		int countSpace = 0; 
		//注意:需要开辟的空间是原字符串长度加上二倍的空格长度。因为虽然替换是三个字符,
		//但原字符串上还有个空格的位置
		for (int i = 0; i < str.length(); i++) {
			if(str.charAt(i) == ' ') {
				countSpace++;
			}
		}
		//不能用String中转结果,因为String不可变。可新定义一个StringBuffer或者用本来的StringBuffer。
		int lenNew = lenOld + countSpace*2;
		str.setLength(lenNew);  //这里如果没有重新设置长度会报错。
		for(int indexNew = lenNew -1, indexOld = lenOld-1; indexNew>indexOld && indexOld >=0; indexOld--  ) {
			char c = str.charAt(indexOld);
			if(c != ' ') {
				str.setCharAt(indexNew, c);
				indexNew--;
			}
			else {
				str.setCharAt(indexNew--, '0');
				str.setCharAt(indexNew--, '2');
				str.setCharAt(indexNew--, '%');
			}
		}
		return str.toString();
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值