替换空格

题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

方法一
传过来的参数是StringBuffer,我们可以使用StringBuffer类的replace和indexOf方法,但是StringBuffer无法判别字符串中是否存在某个字符子串,所以可以转化为String类型,并使用contains进行判别

	public String replaceSpace(StringBuffer str) {
		String result = str.toString();
		if(result.contains(" ")){
			while(str.indexOf(" ") != str.lastIndexOf(" ")){
				int index = str.indexOf(" ");
				str.replace(index,index+1,"%20");
			}
			int index = str.indexOf(" ");
			str.replace(index,index+1,"%20");
			result = str.toString();
			return result;

		}else{
			return result;
		}
	}

方法二
优化while循环的判断,这里借助indexOf()方法在未找到匹配字符串时返回-1

	public String replaceSpace_2(StringBuffer str) {
		int index = str.indexOf(" ");
		while(index != -1) {
			str.replace(index, index + 1, "%20");
			index = str.indexOf(" ");
		}
		String result = str.toString();
		return result;
	}

方法三
不使用replace(),而采用字符替换,这里声明一个新的数组来存放替换后字符串中各字符。

	public String replaceSpace_3(StringBuffer str) {
		int len = str.length();
		int space_len = 0;
		for (int i = 0; i < len; i++) {
			if(str.charAt(i) == ' ') {
				space_len++;
			}
		}
		int arr_len = len + 2 * space_len;  //(len - space_len) + 3 * space_len
		char[] str_arr = new char[arr_len];
		int index = arr_len - 1;
		while(len > 0) {
			if(str.charAt(len - 1) != ' ') {
				str_arr[index--] = str.charAt(len - 1);
			}
			else {
				str_arr[index--] = '0';
				str_arr[index--] = '2';
				str_arr[index--] = '%';
			}
			len--;
		}
		
		return String.valueOf(str_arr);
	}
posted @ 2019-03-18 13:39  如是说  阅读(224)  评论(0编辑  收藏  举报