题目描述
将一个字符串中的空格替换成"%20"
Input:
"A B"
Output:
"A%20B"
解题思路
先算出字符串替换后的总长度,在字符串尾部填充任意字符,使得字符串的长度等于替换后的长度。
令P1指向字符串原来末尾位置,P2指向字符串现在末尾位置。P1,P2从后往前遍历,若P1的字符不是空格,则将P1的字符填充到P2,若P1的字符是空格,则P2倒序填充%20。
从后往前遍历是为了在改变P2指向的内容时,不会影响到P1遍历原来字符串的内容。
代码
public String replaceSpace(String str) {
if (StringUtils.isEmpty(str)) {
return null;
}
StringBuilder sb = new StringBuilder(str);
int p1 = sb.length() - 1;
//这里的循环i要小于p1而不是sb.length(),不然会死循环
for (int i = 0; i < p1; i++) {
if (' ' == sb.charAt(i)) {
sb.append(" ");
}
}
int p2 = sb.length() - 1;
while (p1 >= 0 && p2 > p1) {
char c = sb.charAt(p1--);
if (' ' == c) {
sb.setCharAt(p2--, '0');
sb.setCharAt(p2--, '2');
sb.setCharAt(p2--, '%');
} else {
sb.setCharAt(p2--, c);
}
}
return sb.toString();
}