zoukankan      html  css  js  c++  java
  • 剑指offer —— 替换空格

    1.问题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

    2.思路:可能首先想到的应该就是  str.replaceAll("\s", "%20"),在工作当中肯定可以这样写,但是如果是面试的话,主要考的是编程能力,而不是熟悉API的程度;

                 一种想法是在原有的字符串进行替换,但是只适用于在替换字符的长度和被替换字符长度一致时,才可以使用;

                另一种想法是在 先计算替换之后字符串的长度,再新建一个字符串,用来存放替换之后的字符串,这里采用这种方式;

    3.代码:

    ①:不使用 StringBuilder 和 StringBuffer

        public String replaceSpace(String s) {
            //1.判断有多少空格
            int spaceNum = 0;
            for(int i = 0 ; i < s.length();i++){
                if(s.charAt(i) == ' '){
                    spaceNum++;
                }
            }
            
            if(spaceNum != 0){
                //2.需要的长度
                int newLen = s.length() + 2 * spaceNum;
                char[] newChars = new char[newLen];
                int position = 0;
    
                //3.开始替换
                for(int i = 0  ; i < s.length() ; i++){
                    if(s.charAt(i) == ' '){
                       newChars[position++] = '%';
                       newChars[position++] = '2';
                       newChars[position++] = '0'; 
                    }else{
                       newChars[position++] = s.charAt(i); 
                    }
                }
                
                s = new String(newChars);
            }
          
            return s;
        }

    ②使用 StringBuffer

        public String replaceSpace(StringBuffer str) {
            
            //1.判断有多少空格
            int spaceNum = 0 ;
            for(int i = 0 ; i < str.length();i++){
                if(str.charAt(i) == ' '){
                    spaceNum++;
                }
            }
            
            if(spaceNum != 0){
                //2.需要的长度
                int oldLen = str.length();
                int newLen = oldLen + 2 * spaceNum;
                str.setLength(newLen);
                int position = newLen - 1;
                
                //3.开始替换,从后往前移动,每次则只移动一个字符
                for(int i = oldLen - 1 ; i >= 0 ; i-- ){
                    if(str.charAt(i) == ' '){
                        str.setCharAt(position-- , '0');
                        str.setCharAt(position-- , '2');
                        str.setCharAt(position-- , '%');
                    }else{
                        str.setCharAt(position-- , str.charAt(i));
                    }
                }
            }
            
            return str.toString();
        }

    ③使用 StringBuilder

     public String replaceSpace(StringBuffer str) {
            if(str == null){
                return null;
            }
            StringBuilder sb = new StringBuilder();
            for(int i = 0 ; i < str.length();i++){
                if(str.charAt(i) == ' '){
                    sb.append('%');
                    sb.append('2');
                    sb.append('0');
                }else{
                    sb.append(str.charAt(i));
                }
            }
            return sb.toString();
        }
    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    九九乘法表
    计算器界面
    3.2封装的日期类
    杨辉三角
    100以内的素数
    九九 乘法表
    七、logging模块
    六、MySQLdb 模块
    四、浏览器运行模式
    五、configparser模块
  • 原文地址:https://www.cnblogs.com/shulipeng/p/8990708.html
Copyright © 2011-2022 走看看