思路:从头到尾扫描字符串,碰到空格,就用"%20"替换。由于"%20"占3个字符,所以每次替换,字符串应该从空格向后移动2位
package com.zqj.SwordOffer;
/**
* 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
*/
public class Interview5 {
public static void main(String[] args) {
System.out.println(Interview5.replaceSpace("we are happy day"));
}
public static String replaceSpace(String str){
char[] array = str.toCharArray();//将字符串转换为字符数组
int count = 0;
//计算数组中空格数
for(int i=0;i<array.length;i++){
if(array[i] == ' '){
count++;
}
}
if(count == 0){//递归出口,如果字符数组中没有空格,返回
return new String(array);
}
char[] array2 = new char[array.length+count*2];//重新定义一个字符数组保存添加"%20"后的字符数组,数组长度为原字符数组长+空格数*2
for(int i=0;i<array.length;i++){//将原字符数组复制到新的字符数组
array2[i] = array[i];
}
for(int i = 0;i < array2.length-1;i++){
if(array2[i] == ' '){
for(int j = array.length-1;j>i;j--){//遇到空格,将数组向后移2位
array2[j+2] = array2[j];
}
array2[i] = '%';//分别将% 2 0放进数组
array2[i+1] = '2';
array2[i+2] = '0';
break;
}
}
String arr = new String(array2);
return replaceSpace(arr);//递归新字符串
}
}