题目阐述
请设计一个函数,将字符串中的空格替换成“%20”。例如,给定字符串“We Are Happy”,经替换后会变为“We%20Are%20Happy”。
思路与解决办法
运用API函数
在Java里存在可直接使用的replace
函数,直接按如下方式编写就能达成目标。
public String replaceSpace(StringBuffer str) {
String result = str.toString().replace(" ", "%20");
return result;
}
借助StringBuilder拼接
采用额外的空间来处理。对字符串进行遍历,利用StringBuilder进行字符串的拼接操作,碰到空格就添加“%20”,不是空格则直接添加。
public class Solution {
public String replaceSpace(StringBuffer str) {
// 若字符串为空,直接返回null
if (str == null) {
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
sb.append("%20");
} else {
sb.append(str.charAt(i));
}
}
return sb.toString();
}
}
不过这里用到了额外的空间,依靠StringBuilder来存储内容。
不使用额外空间
若不使用额外空间,那就得在原字符串上进行修改:
- 将字符串转换成字符数组,遍历一次来统计空格的个数。
- 对数组进行扩容,保证空格替换成“%20”时有足够的空间:新的长度 = 原来的字符数组长度 + 空格个数×2。
- 再次遍历,进行复制操作,遇到非空格字符就直接复制,遇到空格时,就把“%20”这三个字符依次复制进去。
public class Solution {
public String replaceSpace(StringBuffer str) {
// 转换成字符数组
char[] originChars = str.toString().toCharArray();
int spaceNum = 0;
// 计算空格的个数
for (int i = 0; i < originChars.length; i++) {
if (originChars[i] == ' ') {
spaceNum++;
}
}
// 新字符数组的长度
int newCharsLength = originChars.length + 2 * spaceNum;
int newStrIndex = 0;
for (int index = 0; index <= originChars.length - 1; index++) {
if (originChars[index] != ' ') {
// 直接复制
newChars[newStrIndex++] = originChars[index];
} else {
// 空格则需要复制三个字符
newChars[newStrIndex++] = '%';
newChars[newStrIndex++] = '2';
newChars[newStrIndex++] = '0';
}
}
// 转成字符串
return new String(newChars);
}
}
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12610.html