一、题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
输入 :一个字符串str
输出 :替换之后的字符串
二、思路分析
1、使用StringBuilder。
创建一个StringBuilder对象stringBuilder,在遍历原字符串的同时,把遍历到的字符添加到stringBuilder中;若遍历到空格,则添加%20。
2、使用StringBuffer。
先遍历字符串,计算空格个数(numberOfSpace),替换字符串长度为原长度(oldLength )+ numberOfSpace*2;
然后令 oldLength 指向字符串原来的末尾位置,newLength 指向字符串现在的末尾位置。二者均从后向前遍历,当 oldLength 遍历到一个空格时,就令 newLength 指向的位置依次填充 0、2、%,否则就填充上 oldLength 指向的值。
三、实现代码
/**
* @AUTHOR:0416
* @DESCRIPTION:
* @DATE:2019/10/16
**/
public class ReplaceSpace {
/**
* Method one: replace space by using StringBuilder class
* @param origin
* @return
*/
public static String replaceByStringBuilder(String origin){
if(origin.isEmpty()){
return "";
}
StringBuilder stringBuilder = new StringBuilder();
for(int i = 0; i < origin.length(); i++){
char temp = origin.charAt(i);
if(temp == ' '){
stringBuilder.append("%20");
}else{
stringBuilder.append(temp);
}
}
return stringBuilder.toString();
}
/**
* Method two
* @param origin
* @return
*/
public static String replaceByStringBuffer(StringBuffer str){
if(str.length() == 0){
return "";
}
int oldLength = str.length();
int numberOfSpace = 0;
for (int i = 0; i < oldLength; i++) {
if(str.charAt(i) == ' '){
numberOfSpace ++;
}
}
int newLength = oldLength + numberOfSpace*2;
str.setLength(newLength);
//作为下标时要减一
oldLength --;
newLength --;
while(oldLength >= 0 && newLength >= 0){
char temp = str.charAt(oldLength);
if(temp == ' '){
str.setCharAt(newLength--, '0');
str.setCharAt(newLength--, '2');
str.setCharAt(newLength--, '%');
}else{
str.setCharAt(newLength--, temp);
}
oldLength --;
}
return str.toString();
}
public static void main(String[] args){
String s = "we are happy.";
System.out.println(replaceByStringBuilder(s));
StringBuffer stringBuffer = new StringBuffer(s);
System.out.println(replaceByStringBuffer(stringBuffer));
}
}