请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:创建一个StringBuffer,从头读取字符串每一个字符,若非空,加原来字符;若为空,加“%20”
字符串长度会增加,所以用StringBuffer或者StringBuilder
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuffer str1=new StringBuffer();
for(int i=0;i<str.length();i++)
{
if(String.valueOf(str.charAt(i)).equals(" "))
{
str1.append("%20");
}
else
{
str1.append(str.charAt(i));
}
}
return str1.toString();
}
}
思路二:遍历原字符串,统计出空格数目,增加字符串长度
从后向前遍历字符串,如果有空格,加%20;
无空格,加原值
public class Solution {
public String replaceSpace(StringBuffer str) {
//length为字符串原始长度
int length = str.length();
//numSpace用于储存空格个数
int numSpace = 0;
//遍历字符串,统计空格个数
for (int i = 0; i < length; i++) {
if (str.charAt(i) == ' ')
numSpace++;
}
//当字符串中没有空格的时候直接输出原字符串(在没有空格的时候提高效率,无实际意义)
if(numSpace==0)
return str.toString();
//新字符串长度应该 = 原来的长度 + 空格的个数 * 2
int newLength = numSpace*2 + length;
//重新设定字符串长度为新的长度
str.setLength(newLength);
//Java中没有用于表示字符串结尾的"/0",所以直接从最后一位index开始遍历(从index = length-1开始)
newLength--;
for (int i = length-1; i >= 0; i--) {
if (str.charAt(i) == ' ') {
str.setCharAt(newLength--, '0');
System.out.println(str.toString());
str.setCharAt(newLength--, '2');
System.out.println(str.toString());
str.setCharAt(newLength--, '%');
System.out.println(str.toString());
} else {
str.setCharAt(newLength--, str.charAt(i));
System.out.println(str.toString());
}
}
return str.toString();
}
}
本文介绍了一种将字符串中的空格替换为“%20”的算法实现,提供了两种方法:一是使用StringBuffer逐字符检查并替换;二是先统计空格数量,再从后往前进行替换,适用于URL编码场景。
1116

被折叠的 条评论
为什么被折叠?



