package com.jianzhioffer.replacespace;
/**
* 题目:请实现一个函数,将一个字符串中的每个空格替换成“%20” eg: We Are Happy 替换为We%20Are%20Happy
* 思路:数空格、不需要建立新String,替换顺序是右到左,这样替换的空格数会少
*
* @author hexiaoli
*/
public class Main {
public static String replaceSpace(StringBuffer str) {
// 边界
if (str == null || str.length() <= 0) {
return null;
}
// 遍历字符串,统计空格个数
int countSpaceNumber = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
countSpaceNumber++;
}
}
// 设置字符串新长度
int oldLength = str.length();
int newLength = oldLength + countSpaceNumber * 2;
str.setLength(newLength);
int oldIndex = oldLength - 1;
int newIndex = newLength - 1;
// 遍历旧字符串,时刻防止越界问题
for (; oldIndex >= 0 && oldIndex < newIndex; oldIndex--) {
if (str.charAt(oldIndex) == ' ') {
str.setCharAt(newIndex--, '0');
str.setCharAt(newIndex--, '2');
str.setCharAt(newIndex--, '%');
} else {
str.setCharAt(newIndex--, str.charAt(oldIndex));
}
}
return str.toString();
}
public static void main(String[] args) {
// 方法一:
StringBuffer str = new StringBuffer();
str.append("We Are Happy");
// System.out.println(str.toString().replace(" ", "%20"));
System.out.println(replaceSpace(str));
}
}