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

      

  • 相关阅读:
    [洛谷P2745] [USACO5.3]窗体面积Window Area
    [洛谷P2751] [USACO4.2]工序安排Job Processing
    [洛谷P2738] [USACO4.1]篱笆回路Fence Loops
    [洛谷P4609] [FJOI2016]建筑师
    [洛谷P3228] [HNOI2013]数列
    解决Qt5使用SSL的“qt.network.ssl: QSslSocket: cannot resolve SSLv2_client_method”错误
    qt查看是否支持SSL
    qt获取依赖的openssl的版本
    qt关闭ssl验证,解决不能正常使用自签署ssl证书API的问题
    使用OpenSSL创建HTTPS所使用的SSL证书
  • 原文地址:https://www.cnblogs.com/kexiblog/p/10827999.html
Copyright © 2011-2022 走看看