2.请实现一个函数,把字符串中的每个空格替换成“%20”.例如“We are happy.”输出“We%20are%20happy.”
(1)为什么要记录原字符数组长度?
我的理解是一个空格占一个数组中的一个位置,而%20要占三个位置,所以想要替换一个空格后面的字符串要后移。(字符串后移需从后往前移动)。还需要确保转换后的字符长度不超过字符数组的最大值。
if(targetlength>string.length){
return -1;}
(2)usedlength--:从后向前,第一个开始处理的字符
targetlength--:处理后的字符放置的位置
(3)String(char[] value, int offset, int count)
分配一个新的 String,它包含取自字符数组参数value一个子数组的字符。
public class test2{
public static int ReplaceBlank(char[]string ,int usedlength){
if(string==null||string.length<usedlength){
return -1;
}
int whitecount=0;
for(int i=0;i<usedlength;i++){
if(string[i]==' '){
whitecount++;
}
}
int targetlength = whitecount*2+usedlength;
int tmp = targetlength;
usedlength--;
targetlength--;
if(whitecount==0){
return -1;
}
while(usedlength>0&&usedlength<targetlength){
if(string[usedlength]==' '){
string[targetlength--] = '0';
string[targetlength--] = '2';
string[targetlength--] = '%';
}
else{string[targetlength--] = string[usedlength];}
usedlength--;
}
return tmp;
}
public static void main (String [] args){
char[] string = new char[50];
string[0] = 'W';string[1] = 'e';
string[2] = ' ';string[3] = 'a';
string[4] = 'r';string[5] = 'e';
string[6] = ' ';string[7] = 'h';
string[8] = 'a';string[9] = 'p';
string[10] = 'p';string[11] = 'y';
int length = ReplaceBlank(string,12);
System.out.println(new String (string,0,length));
}
}
输出结果:We%20are%20happy.