请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
思路 StringBuilder输入:s = “We are happy.”
输出:“We%20are%20happy.”
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数组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;ichar 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;iif(charArray[i]==' '){ cnt++; } } // for(i=0;i // if(s.charAt(i)==' '){ // cnt++; // } // } //新数组的长度 char[] newArr=new char[n+2*cnt]; //遍历添加 for(i=0;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); } }