剑指Offer-替换空格
题目: 实现一个函数,把字符串中的每一个空格替换为"%20"。
背景: 在URL中存在一些特殊字符,如空格、#等,我们需要把这些特殊字符转换为服务器所能识别的字符,转换的规则为在%后加上ASCII码的两位十六进制的表示。
思路如下
如果每一次发现一个空格就在这个空格的位置插入一个%20的话,考虑不覆盖后边的字符的情况下,就要将后边的进行后移,而如果中间穿插多个空格就会导致部分字符串进行多次后移,这样肯定不是最让人满意的答案。在允许自己分配足够的内存的情况下,因为一个空格替换需要多出来两个长度,则分配一个丁长发的新字符串,再逐次重新写新字符串
public static String replaceSpace(String str){
if (null == str || str.isEmpty()) return null;
int le = str.length();
char[] chars = str.toCharArray();
//计算空格的数量
int spaceCount = 0;
for (char c : chars) {
if (c == ' '){
spaceCount ++;
}
}
if (spaceCount == 0) return str;
int newLe = le+spaceCount*2;
char[] newChar = new char[newLe];
int p2 = newLe - 1;
for (int i = chars.length - 1; i >= 0; i--) {
if (' ' != chars[i]){
newChar[p2--] = chars[i];
}else{
newChar[p2--] = '0';
newChar[p2--] = '2';
newChar[p2--] = '%';
}
}
return new String(newChar);
}
测试