剑指offer
题目如下
请实现一个函数,将一个字符串中的每个空格替换成"%20"。
例如,当字符串为We Are Happy,
则经过替换后的字符串为 We%20Are%20Happy。
具体的代码实现如下
1.遍历实现
public class Solution {
/**
* 替换空格
* 问题描述:请实现一个函数,将一个字符串中的每个空格替换成"%20"。
* 例如,当字符串为We Are Happy
* 则经过替换后的字符串为
* We%20Are%20Happy
*
*/
public String replaceSpace(StringBuffer str){
String str1 = str.toString();
if(str1.equals("")){
return str1;
}
char[] strArray = str1.toCharArray();
int i = 0;
int spaceLength = 0;
//遍历数组中元素,记录空格的数量
while(i < strArray.length){
if(strArray[i] == ' '){
spaceLength ++;
}
i++;
}
//创建新数组,长度为原数组+空格数量的2倍,以方便替换20%三个字符
int newStrLength = strArray.length + spaceLength * 2;
char[] newStr = new char[newStrLength];
int k = strArray.length - 1 ;
int j = newStrLength - 1 ;
//替换字符
while(k >= 0){
if(strArray[k] != ' ') {
newStr[j--] = strArray[k--];
}else{
newStr[j--] = '0';
newStr[j--] = '2';
newStr[j--] = '%';
k--;
}
}
return new String(newStr);
}
public static void main(String[] args) {
Solution sl = new Solution();
StringBuffer str = new StringBuffer("We Are Happy");
System.out.println(sl.replaceSpace(str));
}
}
2.利用API中的delete,append实现
public class Solution {
public String replaceSpace(StringBuffer str) {
String src = str.toString();
str.delete(0, src.length());
//清空数组,便于添加
char[] chars = src.toCharArray();
for (char a : chars) {
if (a == ' ') {
str.append("%20");
} else {
str.append(a);
}
}
return str.toString();
}
public static void main(String[] args) {
StringBuffer str = new StringBuffer("We Are Happy");
Solution sl = new Solution();
System.out.println(sl.replaceSpace(str));
}
}