一、题目
请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.”,则输出“We%20are%20happy.”。
二、解题思路
先判断字符串中空格的数量。根据数量判断该字符串有没有足够的空间替换成"%20"。
如果有足够空间,计算出需要的空间。根据最终需要的总空间,维护一个指针在最后。从后到前,遇到非空的就把该值挪到指针指向的位置,然后指针向前一位,遇到“ ”,则指针前移,依次替换为“02%”。
public String replaceBlank( String testString){
// 判断输入是否合法
if(testString==null ||testString.length<=0){
return "";
}
// 统计字符数组中的空白字符数
char[] testArray=testString.toCharArray();
int whiteCount=0;
for(int i=0;i<testArray.length;i++){
if(string[i]==' '){
whiteCount++;
}
}
if(whiteCount==0){
return testString;
}
int originLength=testString.length();
int targetCount=whiteCount*2+originLength;
int tem=targetCount;
// 如果转换后的长度大于数组的最大长度,直接返回失败
char[] targetArray=new char[targetCount];
System.copy(testArray,0,targetArray,0,testString.toCharArray().length);
targetCount--; //从后向前,第一个开始处理的字符
originLength--;// 处理后的字符放置的位置
while(originLength>=0&&targetCount>originLength)){
// 如是当前字符是空白字符,进行"%20"替换
if(testArray[originLength]==' '){
targetArray[targetCount--]='0';
targetArray[targetCount--]='2';
targetArray[targetCount--]='%';
}else{
targetArray[targetCount--]=string[originLength];
}
originLength--;
}
return String.ValueOf(targetArray);
}