题目描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路
第一种思路
如果可以直接使用正则,,,直接正则替换,美滋滋的鸭,不需要什么算法。
只需要一行代码即可,关于正则的相关知识请去看我另一个教程正则表达式学习
第二种思路
将字符串转换为Cahr类型的数组,实例化一个StringBuilder对象,如果char数组是空格,那么StringBuilder就append一个%20,如果是其他的则按照char的值append
第三种思路
从前向后记录‘ ’数目,从后向前替换‘ ’。 重点:从后向前替换的时候的技巧 例如:“we are lucky”
0 1 2 3 4 5 6 7 8 9 10 11 w e a r e l u c k y 可以得知count=2;//空格的个数。 所以在替换的时候711的字母要向后移动count×2个位置,35字母要向后移动(count-1)×2个位置
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 w e a r e l u c k y w e a r e l u c k y 我们在空缺的地方填写%20即可
这种方法适合C/C++写,不适合java写
代码实现
第一种思路
public class Main {
public static void main(String[] args) {
StringBuffer str = new StringBuffer();
str.append("hello world");
System.out.println(replaceSpace(str));
}
public static String replaceSpace(StringBuffer str) {
return str.toString().replaceAll("[ ]","%20");
}
}
第二种思路
public class Main {
public static void main(String[] args) {
StringBuffer str = new StringBuffer();
str.append("hello world");
System.out.println(replaceSpace(str));
}
public static String replaceSpace(StringBuffer str) {
char[] chararray = str.toString().toCharArray();
StringBuilder sb = new StringBuilder();
for (int i=0;i<chararray.length;i++)
{
if(chararray[i] == ' ')
{
sb.append("%20");
}
else sb.append(chararray[i]);
}
return sb.toString();
}
}
第三种实现
public class Main {
public static void main(String[] args) {
StringBuffer str = new StringBuffer();
str.append("hello world");
System.out.println(replaceSpace(str));
}
public static String replaceSpace(StringBuffer str) {
char[] chararray = str.toString().toCharArray();
int count = 0;
for(int i=0;i<chararray.length;i++)
{
if(chararray[i]==' ') count++;
}
char[] newarray = new char[chararray.length + count*2];
for(int j=chararray.length-1;j>=0;j--)
{
if(chararray[j]!=' '){
newarray[j+2*count]=chararray[j];
}
else{
count--;
newarray[j+2*count]='%';
newarray[j+2*count+1]='2';
newarray[j+2*count+2]='0';
}
}
return String.valueOf(newarray);
}
}
欢迎关注我的个人博客zenshin’blog