题目:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
知识点:
字符串
思路:
String是immutable类。StringBuffer是mutable的,可以修改字符串的长度 setLength(int length); 、字符串指定位置的字符 setCharAt(int position, char replace)
本题要求将字符串中的字符,替换成字符串。
方法一,返回新String。可以创建一个新的StringBuffer对象,初始化为空,然后用Append方法截取原字符串从非空格到空格。
方法二,再原来String做修改。
1. 从前往后遍历字符串,得到空格的数量。更新字符串的长度(扩容)。
2. 从后往前替换字符串的话,每个字符串只需要移动一次;
方法三,Java String类方法。
Str.toString().replace('', "%20")
代码:
public class Solution { public String replaceSpace(StringBuffer str) { //count the number of space from beginning to the end int numSpace = 0; for(int i = 0; i < str.length(); i++) { if(str.charAt(i) == ' ') { numSpace++; } } int oldStrLen = str.length(); int updatePointer = str.length() + numSpace*2 - 1; str.setLength(str.length() + numSpace*2); // iterate from the end to beginning // i--,不要手抖写成i++ for (int i = oldStrLen - 1; i >= 0; i--) { if(str.charAt(i) == ' '){ str.setCharAt(updatePointer--, '0'); str.setCharAt(updatePointer--, '2'); str.setCharAt(updatePointer--, '%'); } else { str.setCharAt(updatePointer--, str.charAt(i)); } } // 转换成字符串返回 return str.toString(); } }