N2-替换字符串空格
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
方法一:新建一个字符串进行替换
* 创建一个新的buffer对象 对原来的字符串进行遍历 遇到一个数值 若是空格则在新得buffer对象中
* 添加%20若不是空格则将原来的字符添加进去
* 用到buffer 中的append方法以及charat方法
* @author Sonya
* 方法二:使用原本的replace方法 或者replaceAll方法
* 方法三:在原有的对象上进行替换 那么需要考虑哪种最有效率 从后往前插 会比较节省时间 注意数组下届问题。
public class N2_Replace_Space {
//方法一:
public String replaceSpace(StringBuffer str) {
//if(str.length()<=0) 此处不应该是对length进行判断 而是应该判断str是否应该是null
//return null; 否则用例“”不通过
if(str==null)return null;
StringBuffer str1=new StringBuffer();//创建一个新的
for(int i=0;i<str.length();i++) {
if(str.charAt(i)==' ') {
str1.append("%");
str1.append("20");
}else{
str1.append(str.charAt(i));
}
}
String str2=str1.toString();
return str2;
}
public String replaceSpace2(StringBuffer str) {
if(str==null)
return null;
for(int i=0;i<str.length();i++) {
if(str.charAt(i)==' ')
str.replace(i, i+1, "%20");
System.out.println(i+" "+str.charAt(i));
System.out.println(str);
}
return str.toString();
//return str.toString().replaceAll("\\s", "%20");
//刨除上面的代码 直接这一行也可以成功 但是直接调用应该不是命题者想考查的
}
public String replaceSpace3(StringBuffer str) {//这个按照这样的思路会数组越界
if(str==null)
return null;
//从后往前插
//先计算空格的个数
int spacenum=0;
for(int i=0;i<str.length();i++) {
if(str.charAt(i)==' ')
spacenum++;
}
int j=str.length()-1;//记录原来的数组长度并-1
//使str的长度扩大到转换成%20之后的长度,防止下标越界
str.setLength(str.length()+2*spacenum);
for(int i=j;i>=0;i--) {
if(str.charAt(i)!=' ') {
str.setCharAt(i+2*spacenum, str.charAt(i));
}
else {
spacenum--;
str.setCharAt(i+2*spacenum, '%');//这样会存在数组越界问题
str.setCharAt(i+2*spacenum+1, '2');
str.setCharAt(i+2*spacenum+2, '0');
}
}
return str.toString();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer s=new StringBuffer("we are luncky ");
N2_Replace_Space n2=new N2_Replace_Space();
System.out.println(n2.replaceSpace3(s));
}
}

浙公网安备 33010602011771号