zoukankan      html  css  js  c++  java
  • P44、面试题4:替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。

      如果用java string类中提供的replace方法可以很快的进行替换。

    代码实现:

    package com.yyq;
    
    /**
     * Created by Administrator on 2015/9/4.
     */
    public class ReplaceBlank {
        public static void main(String args[]){
            String str = "we are happy";
            String newStr = str.replace(" ","%20");
            System.out.println(newStr);
        }
    }

    如果是按照很原始的方法进行替换的话,里面包含着大技巧。

    我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来长度加上2乘以空格数目。从字符串的后面开始复制和替换,直到都走到字符串首位。

    代码实现:

    package com.yyq;
    
    import java.util.Arrays;
    
    /**
     * Created by Administrator on 2015/9/4.
     */
    public class ReplaceBlank {
        private static int maxLength = 100;
    
        //length 为字符数组string的总容量,新增长的数组长度不能超过length
        public static void repalceBlank(String str, int trueLength, int maxLength) {
            if (str == null || maxLength <= 0) {
                return;
            }
        //如果是传统的静态数组,java中是不允许动态扩充的,如果需要扩充的话,则需要使用java自带的累积框架,如List
            char oldString[] = str.toCharArray();
            int numberBlank = 0;
            int i = 0;
            while (i < trueLength) {
                if (oldString[i] == ' ') {
                    numberBlank++;
                }
                i++;
            }
    
            int newLength = trueLength + numberBlank * 2;
            //新开辟一个数组
            char newString[] = new char[newLength];
            for (int j = 0; j < newLength; j++) {
                newString[j] = 0;
            }
            if (newLength > maxLength) {
                return;
            }
            int indexOld = trueLength - 1;
            int indexNew = newLength - 1;
            while (indexOld >= 0 && indexOld <= indexNew) {
                if (oldString[indexOld] == ' ') {
                    newString[indexNew] = '0';
                    indexNew--;
                    newString[indexNew] = '2';
                    indexNew--;
                    newString[indexNew] = '%';
                    indexNew--;
                } else {
                    newString[indexNew--] = oldString[indexOld];
                }
                indexOld--;
            }
            System.out.println(new String(newString));
        }
        public static void Test(String testName, String str) {
            if (str == null) return;
            if (testName != null) {
                System.out.println(testName + "======");
                repalceBlank(str, str.length(), maxLength);
            }
        }
    
    // 空格在句子中间
        public void Test1()
        {
            String str = "ab c";
            Test("Test1(空格在句子中间)", str);
        }
    
    // 空格在句子开头
        public void Test2()
        {
            String str = " helloworld";
            Test("Test2(空格在句子开头)", str);
        }
    
    
    // 空格在句子末尾
    
        public void Test3()
        {
            String str = "helloworld ";
            Test("Test3(空格在句子末尾)", str);
        }
    
    // 连续有两个空格
        public void Test4()
        {
            String str = "hello  world";
            Test("Test4(连续有两个空格)", str);
        }
    
    // 传入NULL
        public void Test5()
        {
            Test("Test5(传入null)", null);
        }
    
    // 传入内容为空的字符串
    
        public void Test6()
        {
            String str = "";
            Test("Test6传入内容为空的字符串", str);
        }
    
    
    //传入内容为一个空格的字符串
        public void Test7()
        {
            String str = " ";
            Test("Test7(传入内容为一个空格的字符串)", str);
        }
    
    
    // 传入的字符串没有空格
        public void Test8()
        {
            String str = "helloworld";
            Test("Test8(传入的字符串没有空格)", str);
        }
    
    
    // 传入的字符串全是空格
        public void Test9()
        {
            String str = "   ";
            Test("Test9(传入的字符串全是空格)", str);
        }
    
    
        public static void main(String[] args) {
    // TODO Auto-generated method stub
            ReplaceBlank test = new ReplaceBlank();
            test.Test1();
            test.Test2();
            test.Test3();
            test.Test4();
            test.Test5();
            test.Test6();
            test.Test7();
            test.Test8();
            test.Test9();
        }
    }

    输出结果:

    Test1(空格在句子中间)======

    ab%20c

    Test2(空格在句子开头)======

    %20helloworld

    Test3(空格在句子末尾)======

    helloworld%20

    Test4(连续有两个空格)======

    hello%20%20world

    Test6传入内容为空的字符串======

    Test7(传入内容为一个空格的字符串)======

    %20

    Test8(传入的字符串没有空格)======

    helloworld

    Test9(传入的字符串全是空格)======

    %20%20%20

  • 相关阅读:
    [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
    [经验] Win7减肥攻略(删文件不删功能、简化优化系统不简优化性能)
    [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)
    [经验] 新版SkyIAR、Easy Image X在有些PE里不能运行的解决办法
    [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)
    [讨论] 这几天来封装Win7用户配置文件丢失的解决方法个人心得
    [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装
    [分享] 封装工具ES4配置文件解释
    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
    [分享] 从定制Win7母盘到封装详细教程 By BILL ( 10月23日补充说明 )
  • 原文地址:https://www.cnblogs.com/yangyquin/p/4908260.html
Copyright © 2011-2022 走看看