题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”, 则输出“We%20are%20happy.”。
整个字符串的替换在Java中有很多简便的方法,例如正则表达式。这里我们还是按照书上的方法来进行实现。将字符串看成是字符数组来进行相关处理。
代码实现以及相关理解:
/**
* 替换空格
*
* 方法的思想: 如果从前向后替换,每次对应空格后面的部分都要后移,如果有多个空格则有些部分会后移很多次;
* 此方法先计算出空格的个数,然后在新数组中从后向前进行替换,则不会出现重复后移的情况(一步到位)
*
* 个人理解: 真正的使用中不会有这样的繁琐过程, 但是整体的算法思想是值得借鉴和学习的
*
* @param string
* @return
*/
private String replaceSpace(String string) {
// 将字符串转换为字符数组形式
char[] strs = string.toCharArray();
// 统计字符串中所含的空格个数
int spaceCount = 0;
for (int i = 0; i < strs.length; i++) {
if (strs[i] == ' ') {
spaceCount++;
}
}
// 初始化新的字符数组(按照替换后的字符个数),然后进行替换操作
int originalIndex = strs.length - 1;
int totalIndex = strs.length + spaceCount * 2 - 1;
char[] newStrs = new char[totalIndex + 1];
while (originalIndex >= 0 && totalIndex >= 0) {
if (strs[originalIndex] == ' ') {
newStrs[totalIndex--] = '0';
newStrs[totalIndex--] = '2';
newStrs[totalIndex--] = '%';
} else {
newStrs[totalIndex--] = strs[originalIndex];
}
originalIndex--;
}
// 返回退换成功的字符串
return new String(newStrs);
}