空格(字符)替换
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路://方法1:用空格扩容,数组倒序添加
//方法2:直接用replace函数
//方法3:申请额外数组空间
代码:
package 剑指Offer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SpaceReplace {
//方法1:用空格扩容,数组倒序添加
public static String replaceSpace(StringBuffer str) {
{
int oldlength=str.length();
if(str==null||oldlength<=0) return str.toString();
int spacenum=0;
for(int i=0;i<oldlength;i++){
if(str.charAt(i)==' ') spacenum++;
}
if(spacenum==0) return str.toString();
int oldIndex=oldlength-1;
int newlength=oldlength+spacenum*2;//空格本身占一个,所以只乘2
int newIndex= newlength-1;
str.setLength(newlength);
for(;oldIndex>=0&&oldlength<newlength;oldIndex--){
if(str.charAt(oldIndex)==' '){
str.setCharAt(newIndex--,'0');
str.setCharAt(newIndex--,'2');
str.setCharAt(newIndex--,'%');
}
else{
str.setCharAt(newIndex--,str.charAt(oldIndex));
}
}
return str.toString();
}
}
//方法2:直接用replace函数
public static String replaceSpace1(StringBuffer str)
{
return str.toString().replace(" ", "%20");
}
//方法3:申请额外数组空间
public static String replaceSpace2(StringBuffer str) {
StringBuffer newstr=new StringBuffer();
String oldstr=str.toString();
for(int i=0;i<oldstr.length();i++) {
if(oldstr.charAt(i)==' ') newstr.append("%20");
else {
newstr.append(oldstr.charAt(i));
}
}
return newstr.toString();
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str=br.readLine();
System.out.println("old str:"+str);
StringBuffer strbuf=new StringBuffer(str);
String newstr=replaceSpace(strbuf);
System.out.println("new str:"+newstr);
String newstr1=replaceSpace1(strbuf);
System.out.println("new str1:"+newstr1);
String newstr2=replaceSpace2(strbuf);
System.out.println("new str2:"+newstr2);
}
}
运行截图: