剑指Offer——替换空格

1、题目描述

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

2、代码实现

 1 package com.baozi.offer;
 2 
 3 /**
 4  * 请实现一个函数,将一个字符串中的每个空格替换成“%20”。
 5  * 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 6  *
 7  * @author BaoZi
 8  * @create 2019-07-10-17:51
 9  */
10 public class Offer2 {
11     public static void main(String[] args) {
12         Offer2 offer2 = new Offer2();
13         StringBuffer sb = new StringBuffer("We Are Happy.");
14         String result = offer2.replaceSpace(sb);
15         System.out.println(result);
16     }
17 
18     public String replaceSpace(StringBuffer str) {
19         //1、定义一个变量用于保存结果字符串
20         String result = "";
21         //2、进行边界值的检测,如果目标字符串为空则结果字符串直接返回空
22         if (str == null || str.length() == 0) {
23             return result;
24         }
25         //3、把目标字符串转换为子符数组,便于通过遍历找出目标字符串中空格的个数
26         char[] charArray = str.toString().toCharArray();
27         int count = 0;
28         for (int i = 0; i < charArray.length; i++) {
29             if (charArray[i] == ' ') {
30                 count++;
31             }
32         }
33         //4、根据计算出来的空格的个数计算出新的子符数组的长度
34         char[] newCharArray = new char[charArray.length + 2 * count];
35         //5、这是两个指针分别指向两个字符数组的最后一个位置,比较当前指针p1指向的位置是不是空格,如果是空格的话,
36         //从p2指针指向的位置开始往里边依次添加字符:0、2、%,如果不是空格的话,把p1指针指向的字符赋值给p2指针指向的元素。
37         int p1 = charArray.length - 1;
38         int p2 = newCharArray.length - 1;
39         //这个过程是通过一个while循环来实现的
40         while (p1 >= 0) {
41             if (charArray[p1] == ' ') {
42                 newCharArray[p2--] = '0';
43                 newCharArray[p2--] = '2';
44                 newCharArray[p2--] = '%';
45             } else {
46                 newCharArray[p2--] = charArray[p1];
47             }
48             p1--;
49         }
50         //6、把新的字符数组转换成字符串并赋值给目标字符串
51         result = String.copyValueOf(newCharArray);
52         return result;
53     }
54 }
原文地址:https://www.cnblogs.com/BaoZiY/p/11165643.html