【剑指Offer题解:java】替换空格
程序员文章站
2022-03-10 21:55:26
文章目录题目思路:1、解法一:用Java自带的函数str.toString().replace(" ","%20")。2、解法二:在当前字符串上进行替换。题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:1、解法一:用Java自带的函数str.toString().replace(" “,”%20")。public static String replaceSpace(Stri...
题目
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路:
1、解法一:用Java自带的函数str.toString().replace()
用Java自带的函数str.toString().replace(" “,”%20")。
public String replaceSpace(StringBuffer str) {
return str.toString().replace(" ", "%20");
}
2、解法二:在当前字符串上进行替换。
a. 先计算替换后的字符串需要多大的空间,并对原字符串空间进行扩容;
b. 从后往前替换字符串的话,每个字符串只需要移动一次;
c. 如果从前往后,每个字符串需要多次移动,效率较低。
代码
public String replaceSpace(StringBuffer str) {
if (str == null) return null;
//统计字符串需要扩容的长度(统计空格数量后,空格数量*2+原数量)
int num = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') num++;
}
int l = str.length() - 1;//原先长度
int newL = str.length() + num * 2;//新长度
str.setLength(newL);//扩容
int j = newL - 1;
//从后往前遍历
while (l >= 0 && j >= 0&& l<=j) {
if (str.charAt(l) == ' ') {//如果原来的位置是空格
str.setCharAt(j--, '0');
str.setCharAt(j--, '2');
str.setCharAt(j--, '%');
//也可以写为str.replace(j-2,j+1,"%20");j-=3;
}else {//如果不是空格,将原先位置的字符顺延
str.setCharAt(j--,str.charAt(l));
}
l--;
}
return str.toString();
}
本文地址:https://blog.csdn.net/qq_44895397/article/details/112853675
上一篇: mysql按照时间分组查询的语句