zoukankan      html  css  js  c++  java
  • 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));
    	}
    
    }
    

      

  • 相关阅读:
    协变与逆变
    反射
    TreeCombo
    使用TreeCombo示例
    Calling R from java using JRI
    [转]相似度计算常用方法综述
    [转]聚类算法KMeans, KMedoids, GMM, Spectral clustering,Ncut
    Learning D3.js with App iLearning D3.js
    [repost ]经典的机器学习方面源代码库
    [转]数据挖掘中所需的概率论与数理统计知识、上
  • 原文地址:https://www.cnblogs.com/kexiblog/p/10827999.html
Copyright © 2011-2022 走看看