题目描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路及实现:
解法一:遍历计算空格数以确定替换后字符串长度(原长+空格数*2),从后往前插入指定内容
public class Solution {
public String replaceSpace(StringBuffer str) {
int numBlank = 0;
int N = str.length();
for(int i = 0; i < N; i++) { //计算空格数
if(str.charAt(i) == ' ') {
numBlank++;
}
}
str.setLength(N + 2 * numBlank); //调整字符串长度
int index1 = N - 1;
int index2 = N + 2 * numBlank - 1;
while(index1 >= 0) { //从后向前遍历,遇到空格即替换
if(str.charAt(index1) == ' ') {
index1--;
str.setCharAt(index2--, '0');
str.setCharAt(index2--, '2');
str.setCharAt(index2--, '%');
} else {
str.setCharAt(index2, str.charAt(index1));
index1--;
index2--;
}
}
return new String(str); //转化成指定返回类型
}
}
解法二:再new一个空字符串,将原字符串逐个添加,遇到空格时复制指定内容
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str == null)
{
return null;
}
int len = str.length();
//StringBuffer sb = new StringBuffer();
StringBuilder sb = new StringBuilder();
for(int i =0;i<len;i++)
{
if(str.charAt(i) == ' ')
{
sb.append("%");
sb.append("2");
sb.append("0");
}else
{
sb.append(str.charAt(i));
}
}
return sb.toString(); //转化成指定返回类型
}
}
解法三:借助java本身的replace(),遍历字符串,遇到空格就替换
public class Solution {
public String replaceSpace(StringBuffer str) {
if(str==null)
{
return null;
}
for(int i=0;i<str.length();i++)
{
char c = str.charAt(i);
if(c==' ')
{
str.replace(i,i+1,"%20");
}
}
String newstr = str.toString(); //转化成指定返回类型
return newstr;
}
}
方法四:借助delete()和insert()
public class Solution {
public static String replaceSpace(StringBuffer str) {
for (int i = str.length() - 1; i >= 0; i--) {
if (str.charAt(i) == ' ')
{ str. deleteCharAt(i);
str.insert(i, "%20");
}
}
return str.toString(); //转化成指定返回类型
}
}
关于哪种解法比较好,各路大神众说纷纭,个人觉得看具体的需求吧,毕竟有些时候苛求时间,有些时候苛求空间。