剑指Offer面试题:2.替换空格
一、题目
请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。
二、思路
在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),因此当遍历到一个空格时,需要在尾部填充两个任意字符。
令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。P1 和 P2 从后向前遍历,当 P1 遍历到一个空格时,就需要令 P2 指向的位置依次填充 02%(注意是逆序的),否则就填充上 P1 指向字符的值。
从后向前遍是为了在改变 P2 所指向的内容时,不会影响到 P1 遍历原来字符串的内容。
————————————————
三、解决问题
package swordoffer; /** * @author LQ * @version 1.0 * @date 2020\3\10 0010 16:51 */ /* 题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 */ public class Solution02 { public static void main(String[] args) { System.out.println("hello"); System.out.println("=============================="); Solution02 sword = new Solution02(); sword.test1(); System.out.println("=============================="); sword.test2(); System.out.println("=============================="); sword.test3(); System.out.println("=============================="); sword.test4(); } /* 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。 因为一个空格要替换成三个字符(%20),因此当遍历到一个空格时,需要在尾部填充两个任意字符。 令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置。 P1 和 P2 从后向前遍历, 当 P1 遍历到一个空格时,就需要令 P2 指向的位置依次填充 02%(注意是逆序的), 否则就填充上 P1 指向字符的值。 从后向前遍是为了在改变 P2 所指向的内容时,不会影响到 P1 遍历原来字符串的内容。 */ public String replaceSpace(StringBuffer str) { if (str == null) { System.out.println("输入错误!"); return null; } int P1 = str.length() - 1; //1.在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度 for (int i = 0; i <= P1; i++){ //因此当遍历到一个空格时,需要在尾部填充两个任意字符。 if(str.charAt(i) == ' '){ str.append(" "); } } //2.令 P1 指向字符串原来的末尾位置,P2 指向字符串现在的末尾位置 int P2 = str.length() - 1; //3.P1 和 P2 从后向前遍历 while(P1 >= 0 && P2 > P1){ char c = str.charAt(P1--);//保留 P1 指向字符的值。 //4.当 P1 遍历到一个空格时,就需要令 P2 指向的位置依次填充 02%(注意是逆序的) if(' ' == c){ str.setCharAt(P2--,'0'); str.setCharAt(P2--,'2'); str.setCharAt(P2--,'%'); }else{ //5.否则就填充上 P1 指向字符的值。 str.setCharAt(P2--,c); } } return str.toString(); } //测试用例 //1.输入为null public void test1() { System.out.print("Test1:"); StringBuffer sBuffer = null; String s = replaceSpace(sBuffer); System.out.println(s); } //2.输入为空字符串 public void test2() { System.out.print("Test2:"); StringBuffer sBuffer = new StringBuffer(""); String s = replaceSpace(sBuffer); System.out.println(s); } //3.输入字符串无空格 public void test3() { System.out.print("Test3:"); StringBuffer sBuffer = new StringBuffer("abc"); String s = replaceSpace(sBuffer); System.out.println(s); } //4.输入字符串We Are Happy! public void test4() { System.out.print("Test4:"); StringBuffer sBuffer = new StringBuffer("We Are Happy!"); String s = replaceSpace(sBuffer); System.out.println(s); } }
努力也是需要学习的,别再让你的努力,只感动了自己!愿你的每一次努力,都能为自己和别人创造价值。
Java基础 文章被收录于专栏
建立本人的Java基础技术栈积累库