题目
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
第一次错误解法
class Solution {
public String replaceSpace(String s) {
String[] str = s.split(" ");
StringBuilder sb = new StringBuilder();
for (int i=0;i<str.length-1;i++) {
sb.append(str[i]);
sb.append("%20");
}
return sb.toString()+str[str.length-1];
}
}
错误原因:看到示例中将空格替换为“%20”,理所当然的认为首先将字符串用空格划分,然后在中间加入“%20”即可,在提交后“ ”(四个连续空格)测试用例没有通过。本程序输出为空,实际上应该输出“%20%20%20%20”
第二次正确解法
class Solution {
public String replaceSpace(String s) {
char[] array = s.toCharArray();
StringBuilder sb = new StringBuilder();
for (char c : array) {
if (c != ' ') {
sb.append(c);
} else {
sb.append("%20");
}
}
return sb.toString();
}
}
吸收了错误的经验更换另一种思路,将字符串拆分成一个字符数组,一个一个字符进行检验,如果是空格则让StringBuilder添加上“%20”,否则就加上原字符,最后成功通过。
力扣标答
class Solution {
public String replaceSpace(String s) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == ' ') {
result.append("%20");
} else {
result.append(c);
}
}
String s1 = result.toString();
return s1;
}
}
总结
很久没有打代码,手生了很多,很多类和方法都有些遗忘,最最开始的时候甚至想着如何用正则表达式解决,标答中的charAt方法直接通过索引获得字符,省去了转换为数组的步骤。此外看了评论区,这道题最简单的解法为:
return s.replace(" ","%20");
replace是java的String类中本来就有的方法,replace的用法
public String replace(char searchChar, char newChar)