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();
}
}
剑指offer02
原文:http://blog.51cto.com/12222886/2059307