题目:
请实现一个函数,将一个字符串中的每个空格替换成 “%20” 。例如,当字符串为 We Are Happy 。则经过替换之后的字符串为 We%20Are%20Happy 。
解法:
1、replaceAll
public static String replace(String str, String beforeStr, String replacement) {
String string = str.replaceAll(beforeStr, replacement);
System.out.println(str);
return string;
}
解读:
replace源码:
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
public String replaceAll(String replacement) {
reset();
boolean result = find();
if (result) {
StringBuilder sb = new StringBuilder();
do {
appendReplacement(sb, replacement);
result = find();
} while (result);
appendTail(sb);
return sb.toString();
}
return text.toString();
}
这个源码的实现使用了 正则表达式,并且同时实现代码里面不停的创建与销毁对象,性能方面很不理想。
更好的解决方法:只需要去寻找可以被替换的部分,然后把不被替换的部分和替换者一个个连接起来就行了。
2、重新开辟新数组,一一替换
public static String replaceSpace(String str) {
//先判断是不是空字符串
if (str.equals("")) {
return str;
}
//1.计算原字符串的空格数
//1)将字符串转为字节数组
char[] strArray = str.toCharArray();
//2)计算空格数
int spaceNum = 0;
for (int i = 0; i < strArray.length; i++) {
if (strArray[i] == ' ') {
spaceNum++;
}
}
//2.重新开辟新数组,一一填进去。遇到空格就添上相应的替换符
char[] newStrArray = new char[strArray.length + spaceNum * 2];
int j = 0;
for (int i = 0; i < strArray.length; i++) {
if (strArray[i] != ' ') {
newStrArray[j] = strArray[i];
j++;
} else {
newStrArray[j] = '%';
j++;
newStrArray[j] = '2';
j++;
newStrArray[j] = '0';
j++;
}
}
return new String(newStrArray);
}
参考:
https://www.cxyxiaowu.com/1438.html
另:
收获1、
所以,
str.equals("")不会报空指针异常。
收获2:new String()的默认值是""
public String() {
this.value = "".value;
}