替换

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

(1)为什么要记录原字符数组长度?

        我的理解是一个空格占一个数组中的一个位置,而%20要占三个位置,所以想要替换一个空格后面的字符串要后移。(字符串后移需从后往前移动)。还需要确保转换后的字符长度不超过字符数组的最大值。

     if(targetlength>string.length){

        return -1;}

(2)usedlength--:从后向前,第一个开始处理的字符

        targetlength--:处理后的字符放置的位置

(3)String(char[] value, int offset, int count)

          分配一个新的 String,它包含取自字符数组参数value一个子数组的字符。
public class test2{
	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;

		usedlength--;
		targetlength--;

		if(whitecount==0){
			return -1;
		}

		while(usedlength>0&&usedlength<targetlength){
			if(string[usedlength]==' '){
				string[targetlength--] = '0';
				string[targetlength--] = '2';
				string[targetlength--] = '%';
			}
			else{string[targetlength--] = string[usedlength];}
				usedlength--;
		}
		return tmp;
	}

	public static void main (String [] args){
		char[] string = new char[50];
		string[0] = 'W';string[1] = 'e';
		string[2] = ' ';string[3] = 'a';
		string[4] = 'r';string[5] = 'e';
		string[6] = ' ';string[7] = 'h';
		string[8] = 'a';string[9] = 'p';
		string[10] = 'p';string[11] = 'y';

		int length = ReplaceBlank(string,12);
		System.out.println(new String (string,0,length));
	}
}
输出结果:We%20are%20happy.

猜你喜欢

转载自blog.csdn.net/cherishgf/article/details/80756570