①可以用java 中自带的String 类的方法replaceAll(String old,String new);
public String replaceSpace(String s) {
return s.replaceAll(" ", "%20");
}
有现成的函数我还用你算?
那么我们可以遍历遇到空格就替换成%20呗,但是java 中的String 是不可变的!!!那么我们还可以用StringBuilder
②StringBuilder 解法
遍历原来的字符串(转换成字符数组),遇到非空格的就append,遇到空格就替换成%20;
public String replaceSpace(String s) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (c == ' ') sb.append("%20");
else sb.append(c);
}
return sb.toString();
}
③熟悉 StringBuilder 的朋友,应该知道它本质上是一个 char 类型的动态数组:
1.当初始化 StringBuilder 的时候,会初始化一个固定长度的 char 类型的数组
2.当往 StringBuilder 中 append 数据的时候,其实就是往 char 类型的数组最后追加数据
那么,当追加的数据的个数超过了数组的大小的时候,就需要对 char 类型的数据进行扩容了,所以这里的扩容还是有点性能损耗的,那么我们能不能减少这个性能损耗呢?
我们可以通过使用静态数组来解决这个问题
public String replaceSpace(String s) {
int n = s.length();
char[] newArr = new char[3 * n];
int j = 0;
for (int 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);
}



