剑指offer 替换空格 java实现

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


应用:在网络编程中,如果URL参数中含有特殊字符,如空格,‘#’等,可能导致服务器端无法获得正确的参数值。需要将特殊符号转换成服务器可以识别的字符。转换规则是在“%”后面跟上ASCII码的两位十六进制的表。比如:空格的ASCII玛是32,即十六进制的0x20,因此空格被替换成“%20”。

考虑时间复杂度为O(n)的解法,搞定offer就靠它了

1、考虑在原来的字符串上做替换:

    算法描述如下:

    从字符串的后面开始复制和替换,首先准备两个指针,p1和p2,p1指向原始字符串的末尾,p2指向替换后字符串的末尾,接下来,向前移动指针p1,逐个把它指向的字符复制到p2,碰到一个空格之后,把p1向前移动1格,在p2处插入字符串“20%”,由于“20%”长度为3,同时也要把p2向前移动3格。直到p1=p2,表明所有空格都已经替换完毕。


public void replaceBlank(String str,int length){
		if(str == null||str.length() <= 0||length <= 0)
			return;
		char[] string = new char[length];
		//数组间的复制
		System.arraycopy(str.toCharArray(),0,string,0,str.length());
		/*numberOfBlank为空格的数目*/
		int numberOfBlank = 0;
		for(int i = 0;i<str.length();i++){
			if(string[i]==' ')
				++numberOfBlank;
		}
		/*newLength为把空格替换成“%20”之后的长度*/
		int newLength = str.length()+numberOfBlank*2;
		if(newLength > length)
			return;
		int indexOfOriginal = str.length()-1;
		int indexOfNew = newLength-1;
		while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){
			if(string[indexOfOriginal]==' '){
				string[indexOfNew--]='0';
				string[indexOfNew--]='2';
				string[indexOfNew--]='%';
			}else
				string[indexOfNew--] = string[indexOfOriginal];
			-- indexOfOriginal;
		}
		System.out.println(new String(string));
	}
2、创建新的字符串并在新的字符串上替换

 这个比较简单,但需要用到StringBuilder对象。

public void spaceRepNew(String str){
		if(str == null||str.length()<=0)
			return;
		StringBuilder text = new StringBuilder(str);
		StringBuilder newStr = new StringBuilder();
		for(int i = 0;i<text.length();i++){
			if(text.charAt(i)==' ')
				newStr.append("%20");
			else
				newStr.append(text.charAt(i));
		}
		System.out.println(newStr.toString());
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值