替换空格

本文介绍了在网络编程中处理URL参数含有空格的情况,提供了三种不同的空格替换算法实现,包括使用replace函数、常规思路和O(n)高效算法。

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

在网络编程中,如果URL参数中含有特殊字符,如‘空格’、‘#’等,可能导致服务器端无法获得正确

的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在‘%’的后面跟上

ASII码的两位十六进制的表示。

1.  replace函数

public String replaceSpace(StringBuffer str)
{
	// 先对str的情况进行判断
	if (str == null || "".equals(str.toString()))
	{
		return str.toString();
	}
		
	String newStr = str.toString();
	return newStr.replace(" ", "%20");
}

2.  常规思路

从头到尾扫描字符串,每一次碰到空格字符的时候就做替换。

注意:做替换时,空格后面的所有字符都必须后移两个字符。

时间复杂度为O(n^2)的解法

public String replaceSpace(StringBuffer str)
	{
		String replaceStr = "%20";
		// 先对str的情况进行判断
		if (str == null || "".equals(str.toString()))
		{
			return str.toString();
		}
		
		StringBuffer newStr = str;
		int space = 0; // 空格字符的下标
		
		
		while ((space = str.indexOf(" ")) != -1)
		{
			// 先删除该空格
			str = str.delete(space, space+1);
			// 将要替换的字符串放到该位置,该位置后的字符串后移
			str = str.insert(space, replaceStr, 0, replaceStr.length());
		}
		return str.toString();
	}
public String replaceSpace(StringBuffer str)
	{
		String replaceStr = "%20";
		// 先对str的情况进行判断
		if (str == null || "".equals(str.toString()))
		{
			return str.toString();
		}
		
		char[] array = str.toString().toCharArray();
		int numberOfBlank = 0; // 空格数
		int start = 0; // 起始下标
		int end = str.length(); // 结束下标
		
		while (start < end)
		{
			if (array[start] == ' ')
			{
				numberOfBlank++;
			}
			start++;
		}
		
		// 新数组下标
		int newStart = 0; 
		// 新数组的长度
		char[] newArray = new char[array.length + 2 * numberOfBlank];
		
		start  = 0; // 置位
		
		while (start < end)
		{
			newArray[newStart] = array[start];
			// 当前字符是空格
			if (array[start] == ' ')
			{
				// 移动后续字符串
				for (int i=end-1; i>start; i--)
				{
					newArray[i+2] = newArray[i];
				}
				// 做替换
				newArray[newStart] = '%';
				newArray[newStart+1] = '2';
				newArray[newStart+2] = '0';
				newStart += 3;
			}
			else
			{
				newStart++;
			}
			start++;
		}
		
		return new String(newArray);
	}

3. O(n)的解法

一次扫描,碰到空格,就替换为"%20"。

public String replaceSpace(StringBuffer str)
	{
		String replaceStr = "%20";
		// 先对str的情况进行判断
		if (str == null || str.length() == 0)
		{
			return str.toString();
		}
		
		StringBuilder newStr = new StringBuilder();
		for (int i=0; i<str.length(); i++)
		{
			if (str.charAt(i) == ' ')
			{
				newStr.append(replaceStr);
			}
			else
			{
				newStr.append(str.charAt(i));
			}
		}
		return newStr.toString();
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值