不想复杂,那就是直接遍历进行修改。
需要考虑的是使用字符数组存储还是通过StringBuilder可变字符串来存储新的字符串。
使用字符数组的话,则需要考虑字符数组的初始化长度,空格改为%20由一变三,最坏的情况就是全部需要变,那么就初始化长度为原字符串的3倍长度,这很明显会大量耗损空间内存。
代码:
class Solution {
public String replaceSpace(String s) {
char[] c = new char[s.length() * 3];
int index = 0;
for (int i = 0; i < s.length(); i++){
if (s.charAt(i) == ' '){
c[index++] = '%';
c[index++] = '2';
c[index++] = '0';
}else c[index++] = s.charAt(i);
}
String str = String.valueOf(c,0,index);
// String newStr = str.substring(0,index);
return str;
}
}
其中用到了String的一些常用方法:substring方法(没想到全是小写字母),静态方法String.valueOf可以直接进行传参数组的切分
上面说了这种预估大小的初始化会很浪费内存,那么我们就可以使用StringBuilder等可变的来使用
代码:
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for(Character c : s.toCharArray())
{
if(c == ' ') res.append("%20");
else res.append(c);
}
return res.toString();
}
}
StringBuffer与StringBuilder都提供了一系列插入、追加、改变字符串里的字符序列的方法,它们的用法基本相同,只是StringBuilder是线程不安全的,StringBuffer是线程安全的。如果只是在单线程中使用字符串缓冲区,则StringBuilder的效率会高些,但是当多线程访问时,最好使用StringBuffer。
综上,在执行效率方面,StringBuilder最高,StringBuffer次之,String最低,对于这种情况,一般而言,如果要操作的数量比较小,应优先使用String类;如果是在单线程下操作大量数据,应优先使用StringBuilder类;如果是在多线程下操作大量数据,应优先使用StringBuilder类。