标签:字符串,数组
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
两种写法,一种是用Stringbuffer,只需遍历一次,但返回时要复制一份字符串;另一种是用字符数组,缺点是要遍历两次。
参考代码
1、Stringbuffer
注意Stringbuffer的用法和源码
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuffer res = new StringBuffer();
for(int i=0; i<str.toString().length(); i++)
{
if(str.charAt(i) == ' '){
res.append("%20");
} else{
res.append(str.charAt(i));
}
}
return res.toString();
}
}
参数用足够大的char[]数组
public class ReplaceSpace {
public void replceSpaces(char[] str, int length) {
int spaceCount = 0;
for(int i=0; i < length; i++) {
if(str[i] == ' ')
spaceCount++;
}
//System.out.println(spaceCount);
int newLength = length + spaceCount * 2;
str[newLength] = '\0';
newLength = newLength - 1;
for(int i = length - 1; i >= 0; i--) {
if(str[i] == ' ') {
str[newLength--] = '0';
str[newLength--] = '2';
str[newLength--] = '%';
}else {
str[newLength--] = str[i];
}
}
System.out.println(str);
}
public static void main(String[] args) {
ReplaceSpace a = new ReplaceSpace();
char[] str = new char[20];
str[0] = ' ';
str[1] = 'a';
str[2] = ' ';
str[3] = 'b';
str[4] = 'c';
int length = 5;
a.replceSpaces(str, length);
}
}