题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%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);
}