请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
思路
StringBuilder
Java 中的字符串是不变的,所以直接替换是不行的。
我们知道 Java 中有个 StringBuilder 是表达可变的字符串的。我们可以使用 StringBuilder 来实现替换空格
初始化一个 StringBuilder 实例buf
遍历字符串 s 的每个字符:
当遍历到非空字符的时候,直接将字符 append 到 buf 中
如果遍历到的是空字符,那么将 %20 append 到 buf中
返回 sb.toString
代码
class Solution {
public String replaceSpace(String s) {
//利用方法toCharArray将字符串s转换成一个新的字符数组
char[] charArray=s.toCharArray();
//StringBuilder可多次修改
StringBuilder buf = new StringBuilder();
//获取这个字符数组中的每个字符
for(int i=0;i<charArray.length;i++){
if(charArray[i]==' '){
buf.append("%20");
}else{
buf.append(charArray[i]);
}
}
//返回字符串
return buf.toString();
}
}
数组
使用静态数组
class Solution {
public String replaceSpace(String s) {
int i,j=0,n=s.length();
char[] newArr=new char[3*n];
for(i=0;i<n;i++){
char c=s.charAt(i);
if(c==' '){
newArr[j++]='%';
newArr[j++]='2';
newArr[j++]='0';
}else{
newArr[j++]=c;
}
}
return new String(newArr,0,j);
}
}
优化
class Solution {
public String replaceSpace(String s) {
int i,j=0,n=s.length();
int cnt=0;//需要额外增加的空间
//转换成字符数组
char[] charArray=s.toCharArray();
//计算出空格数
for(i=0;i<charArray.length;i++){
if(charArray[i]==' '){
cnt++;
}
}
// for(i=0;i<s.length();i++){
// if(s.charAt(i)==' '){
// cnt++;
// }
// }
//新数组的长度
char[] newArr=new char[n+2*cnt];
//遍历添加
for(i=0;i<n;i++){
char c=s.charAt(i);
if(c==' '){
newArr[j++]='%';
newArr[j++]='2';
newArr[j++]='0';
}else{
newArr[j++]=c;
}
}
//字符串输出
return new String(newArr,0,j);
}
}