替换空格
题目
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思想
先把传入的字符串改为字符数组,对字符数组进行遍历,首先对字符串的null值进行处理,其次遇到空格转化为%20,遇到字符直接加上,最后返回字符串。
(注:传入类型为StringBuffer,如果是String,不存在还能在原字符串修改的情况,但是StringBuffer貌似可以,因此,应考虑一种不需要额外内存的办法。)
代码1(case通过率为12.50%)
(没有考虑到空格在开始的情况)
public static String replaceSpace(String str) {
int length = str.length();
String strRep = null;
char[] charRep = new char[length];
str.getChars(0, length, charRep, 0);
for (int i = 0; i < charRep.length; i++) {
System.out.println("charRep["+i+"]="+charRep[i]);
}
System.out.println();System.out.println();
for (int i = 0; i < length; i++) {
if (charRep[i] == ' ') {
strRep = strRep + "%20";
}else if (strRep == null){
strRep = String.valueOf(charRep[i]);
}else{
strRep = strRep + charRep[i];
}
}
return strRep;
}
代码2
public String replaceSpace(StringBuffer str) {
if (str.length()<1 || str == null)
return str.toString();
int length = str.length();
String strRep = null;
char[] charRep = new char[length];
str.getChars(0, length, charRep, 0);
for (int i = 0; i < charRep.length; i++) {
System.out.println("charRep["+i+"]="+charRep[i]);
}
for (int i = 0; i < length; i++) {
if (strRep == null){
if (charRep[i] == ' ') {
strRep = "%20";
}else
strRep = String.valueOf(charRep[i]);
continue;
}
if (charRep[i] == ' ') {
strRep = strRep + "%20";
}else{
strRep = strRep + charRep[i];
}
}
return strRep;
}
代码3
(不用多申请其他空间,仅利用原地空间。先判断有多少空格,计算新字符串长度,然后利用双指针,从后往前增加字符串。)
public static String replaceSpace1(StringBuffer str) {
int blank = 0;
//先遍历一遍得到空格数
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
blank++;
}
}
int oldLen = str.length();
//新字符串的长度
int newLen = oldLen + blank * 2;
//为新的字符串申请新的长度
str.setLength(newLen);
int oldIndex = oldLen - 1;
int newIndex = newLen - 1;
while (oldIndex >= 0 && newIndex >= oldIndex) {
if (str.charAt(oldIndex) == ' ') {
str.setCharAt(newIndex--, '0');
str.setCharAt(newIndex--, '2');
str.setCharAt(newIndex--, '%');
} else
str.setCharAt(newIndex--, str.charAt(oldIndex));
oldIndex--;
}
return str.toString();
}