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));
	}

}

  

原文地址:https://www.cnblogs.com/kexiblog/p/10827999.html