请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
1.对于这种数组复制题目,主要从后往前处理。
2.Java来写最好是StringBuilder 加上reverse.toString来处理
3.2个指针,p1指针指向原数组的末尾,P2指针指向新复制的数组的末尾,当p1不为空时,p1复制到p2,同时p1--,p2--,当p1指向为空时,在p2连续填入需要的值,同时,p2递减相应的次数,p1--.
package com.hnist.lzn.jinazhioffer;
public class TIhuanBlock {
char[] RepalceBlank(char[] string,int length){
if(string==null||length<=0){
return null;
}
int originLength=0;
int numberOfBlank = 0;
int i = 0;
//Java数组最后一个不是'\0'
while(i<length){
//扫描大小
++originLength;
if(string[i]==' '){
++numberOfBlank;
}
++i;
}
//为啥是*2
int newLength = originLength+numberOfBlank*3;
//以及为啥是>
if(newLength<length)
return null;
//new数目够的情况
char[] strings = new char[newLength];
//防止越界
int indexOfOriginal = originLength-1;
int indexOfNew = newLength-1;
while(indexOfOriginal>=0&&indexOfNew>indexOfOriginal){
if(string[indexOfOriginal]==' '){
strings[indexOfNew--]='0';
strings[indexOfNew--]='2';
strings[indexOfNew--]='%';
}else{
strings[indexOfNew--] = string[indexOfOriginal];
}
--indexOfOriginal;
}
return strings;
}
public static void main(String[] args) {
String nums = "we are happy";
char[] string = nums.toCharArray();
char[] strings = new TIhuanBlock().RepalceBlank(string,string.length);
for(int i=0;i<strings.length;i++){
System.out.print(strings[i]);
}
}
}