Java替换字符串中的空格

x33g5p2x  于2021-03-13 发布在 Java  
字(1.3k)|赞(0)|评价(0)|浏览(329)

设计一种方法,将一个字符串中的所有空格替换成 %20 。你可以假设该字符串有足够的空间来加入新的字符,且你得到的是“真实的”字符长度。

你的程序还需要返回被替换后的字符串的长度。
对于字符串"Mr John Smith", 长度为 13

替换空格之后,参数中的字符串需要变为"Mr%20John%20Smith",并且把新长度 17 作为结果返回。

规则
输入:char[] 和int length
输出:int 最新长度,从char[]取字符串
case:

数组为null
数组长度为0
"we are happy"
"we are "
"we   are "  --连续多个空格
" we are "
" we"
"we "
" we "

思路

1.创建一个新数组,然后一个拷贝过去,遇到空格替换为%20 复杂度为O(n)和O(n)
2.不创建新数组,创建新数组,遇到空格向后移动,复杂度为O(n^2)和O(1)
3.不创建新数组,先遍历一遍,计算空格数量,然后两个指针,从后向前拷贝,这样复杂度为O(n)和O(1)

代码

public int replaceBlank(char string[], int length) {
       
		if(string == null) {
			return 0;
		}
		if(length == 0) {
			return 0;
		}
		int newLength = length;
		for(int i = 0;i < length;i++) {
			if(string[i] ==' ') {
				newLength += 2;
			}
		}
        if(newLength == length ) return length;
		int p = length-1,q = newLength-1;
		while(p>=0) {
			if(string[p] == ' ') {
				string [q--] = '0';
				string [q--] = '2';
				string [q--] = '%';
			}else {
				string[q--] = string[p];
			}
			p--;
		}
		return newLength;
	
    }

测试代码

public char[] fill(String cnt) {
    	char ret[] = new char[100];
    	char c[] = cnt.toarArray();
    	System.arraycopy(c, 0, ret, 0, c.length);
    	return ret;
    }
    public void assertString(String str) {
    	String str1 = str.replaceAll(" ","%20");
    	String str2 = replace(fill(str), str.length());
    	assertEquals(str1,str2);
    }
    public String replace(char arr[] ,int len) {
    	StringBlank1 m1 = new StringBlank1();
    	int newLen = m1.replaceBlank(arr, len);
    	if(arr == null) {
    		arr = new char[1];
    	}
    	return String.valueOf(arr, 0, newLen);
    }

相关文章

热门文章

更多