剑指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 }