题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%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)); } }