zoukankan      html  css  js  c++  java
  • 空格替换

      

    题目描述

    请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
     
    此类题目,如果用java编写可以直接采用内置的替换函数
    import java.util.Scanner;
    
    
    public class ReplaceSpace {
    	public String replaceSpace(StringBuffer str) {
    		String str2 = str.toString();
    		String strNew = str2.replace(" ", "%20");//替换字符
    		//String strNew = str2.replaceAll(" ", "%20");//正则表达式
    		
    		return strNew; 
    	    }
    	public static void main(String[] args){
    		Scanner in = new Scanner(System.in);
    		String str = in.nextLine();
    		ReplaceSpace a = new ReplaceSpace();
    		System.out.println(a.replaceSpace(new StringBuffer(str)));
    	}
    }
    

      没有问题,如果参考替换的源码,对于字符的替换:

    string.java内的源码是:

    public String replace(char oldChar, char newChar) {
            if (oldChar != newChar) {
                int len = value.length;
                int i = -1;
                char[] val = value; /* avoid getfield opcode */
    
                while (++i < len) {
                    if (val[i] == oldChar) {
                        break;
                    }
                }
                if (i < len) {
                    char buf[] = new char[len];
                    for (int j = 0; j < i; j++) {
                        buf[j] = val[j];
                    }
                    while (i < len) {
                        char c = val[i];
                        buf[i] = (c == oldChar) ? newChar : c;
                        i++;
                    }
                    return new String(buf, true);
                }
            }
            return this;
        }
    View Code

    遍历一遍,直接替换,对于字符的替换,repalce函数是采用的字符匹配实现的。

    我们可以采用此思路进行字符串替换。

    首先要将字符串分割到String数组中去,然后直接遍历替换即可,整个过程遍历1遍,时间复杂度为O(n)

    代码:

    import java.util.Scanner;
    
    
    public class ReplaceSpace2 {
    	public String replaceSpace(StringBuffer str) {
    		String[] strArr = str.toString().split("");
    		str = new StringBuffer();
    		for(int i=0; i<strArr.length; i++){
    			if (strArr[i].equals(" "))
    				str.append("%20");
    			else
    				str.append(strArr[i]);
    		}
    		return str.toString(); 
    	    }
    	public static void main(String[] args){
    		Scanner in = new Scanner(System.in);
    		String str = in.nextLine();
    		ReplaceSpace2 a = new ReplaceSpace2();
    		System.out.println(a.replaceSpace(new StringBuffer(str)));
    	}
    }
    

      

  • 相关阅读:
    前端javascript实现二进制读写操作
    个人关于模块化的理解
    javascript实现与后端相同的枚举Enum对象
    grunt 自定义任务实现js文件的混淆及加密
    熟悉并了解uml的使用(一)
    2021年立个Flag,回顾十多年来的IT职业之路-----没事瞎BB
    使用 Visual Studio 创建 .NET 5 控制台应用程序
    log4net将日志进行分类,保存到不同的目录当中
    .net 使用PowerShell获取电脑中的UUID
    .Net MVC中访问PC网页时,自动切换到移动端对应页面
  • 原文地址:https://www.cnblogs.com/feichangnice/p/7662192.html
Copyright © 2011-2022 走看看