1 package algorithms;
2
3 /**
4 * 请实现一个函数,将一个字符串中的每个空格替换成“%20”。
5 * 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
6 *
7 */
8 //先统计出字符串中空格的数量 确定出新串的长度(原串长度+空格数量*2)
9 //举一反三:合并两个数组时,如果从前往后复制每个数字则需要重复移动数字多次,
10 //那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率
11 public class ReplaceSpace {
12 public String replaceSpace(StringBuffer str) {
13 if (str.length() == 0)
14 return "";
15 char[] oldStr = str.toString().toCharArray();
16 // 统计出字符串中空格的数量
17 int count = 0;
18 for (int i = 0, len = oldStr.length; i < len; i++) {
19 if (oldStr[i] == ' ')
20 count++;
21 }
22 char[] newStr = new char[oldStr.length + count * 2];
23 int j = 0;
24 for (int i = 0, len = oldStr.length; i < len; i++) {
25 if (oldStr[i] == ' ') {
26 newStr[j] = '%';
27 newStr[++j] = '2';
28 newStr[++j] = '0';
29 } else {
30 newStr[j] = oldStr[i];
31 }
32 j++;
33 }
34 String s = new String(newStr);
35 return s;
36 }
37 }
38
39
40 /* 看题目要求是否一定要在原字符串上进行操作
41 *
42 * public String replaceSpace(StringBuffer str) {
43 if(str==null){
44 return null;
45 }
46 StringBuilder newStr = new StringBuilder();
47 for(int i=0;i<str.length();i++){
48 if(str.charAt(i)==' '){
49 newStr.append('%');
50 newStr.append('2');
51 newStr.append('0');
52 }else{
53 newStr.append(str.charAt(i));
54 }
55 }
56 return newStr.toString();
57 }*/