package jianzhiOffer;
/*
 * 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.
 * 则经过替换之后的字符串为We%20Are%20Happy。
 */
public class ch02 {
	
	public static void main(String[] args) {
//		String str = "We Are Happy";
//		String newStr = myReplace("%20", " ", str);
//		System.out.println(newStr);
		StringBuffer sb = new StringBuffer("We Are Happy");
		String str = replace(sb);
		System.out.println(str);
	}
	/*
	 * myReplace()方法使用java中提供的api replace()
	 */
	public static String myReplace(String newStr,String oldStr,String str) {
		return str.replace(oldStr, newStr);
	}
	/*
	 * 不考虑java提供的api
	 * 我们可以从前往后替换,也可以从后往前替换,建议使用后者,
	 * 因为从前往后替换比从后往前替换,字符的移动次数要多很多,
	 * 字符在替换之后,字符串长度会发生变化,因此,我们首先计算出
	 * 替换之后字符串的长度,然后分别在旧字符串索引上和新字符串索引上
	 * 进行移动,判断是否为空格,进行相应的替换
	 */
	public static String replace(StringBuffer str) {
		int spacenum = 0;
		for (int i = 0; i < str.length(); i++) {				//计算空格数量
			if(str.charAt(i) == ' ') {
				spacenum++;
			}
		}
		int indexOld = str.length() - 1;						//旧字符串的最后一个索引位置
		int indexNew = str.length() - 1 + spacenum * 2;			//新字符串的最后一个索引位置
		int lengthNew = str.length() + spacenum * 2;			//新字符串的长度
		str.setLength(lengthNew);								//将旧字符串的长度重新设置
		while(indexOld >= 0) {									//遍历进行替换
			if(str.charAt(indexOld) == ' ') {
				str.setCharAt(indexNew--, '0');
				str.setCharAt(indexNew--, '2');
				str.setCharAt(indexNew--, '%');
				indexOld--;
			} else {
				str.setCharAt(indexNew--, str.charAt(indexOld--));
			}
		}
		return str.toString();
	}
}