标签:ace har pen 原理 题目 tostring strong win 空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
方法一:
public String replaceSpace(StringBuffer str) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ‘ ‘) {
str = str.replace(i,i,"%20");
}
}
return str.toString();
}
这种方法是调用自身函数,用起来也很简单。
方法二:
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ‘ ‘) {
sb.append("%20");
} else {
sb.append(str.charAt(i));
}
}
return sb.toString();
}
这种方法是创建一个新的StringBuffer对象,原理也是调用其自身函数,和方法一类似。
方法三:
public String replaceSpace(StringBuffer str) {
int len = str.length();//原字符串的长度
int index = len - 1;
int sum = 0;//统计需要扩容的长度
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ‘ ‘) {
sum++;
}
}
int newLen = str.length() + sum * 2;//新字符串的总长
int newIndex = newLen - 1;
str.setLength(newLen);//将原字符串的长度更改为新的长度
while (newIndex > index){
if (str.charAt(index) == ‘ ‘) {
str.setCharAt(newIndex--, ‘0‘);//如果是从前往后插入字符,那么空格后面的每个字符都要往后挪,所以我们选择从后往前插入
str.setCharAt(newIndex--, ‘2‘);
str.setCharAt(newIndex--, ‘%‘);
} else {
str.setCharAt(newIndex--,str.charAt(index));
}
index--;
}
return str.toString();
}
这种方法是在原字符串上进行扩容,将替换的字符再插入进去,这种方法相对前两种来说更好一些。
标签:ace har pen 原理 题目 tostring strong win 空格
原文地址:https://blog.51cto.com/14298563/2497776