题目:给一个字符类型的数组chas[],将其中的空格替换成20%.
思路:1.遍历一个数组,统计出空格的数量num,数组的长度(本来就知道)。
2.再遍历一遍原数组,将原数组从最后遍历到开始位置,将其值从len+2*num-1的位置放到数组开头的位置。
//总体思路就是将原数组的元素复制到新扩容的位置
public static String replace(char[] chas) {
if(chas==null ||chas.length==0) {
return null;
}
int num=0;
int len=0;
for(len=0;len<chas.length &&chas[len]!=0;len++) {
if(chas[len]==' ') {
num++;
}
}
int j=len+num*2-1;
//将原数组从尾部倒着遍历,将原数组的元素从尾部复制到新扩容的数组长度的尾部,从后往前
for(int i=len-1;i>-1;i--) {
//如果原数组的元素不为空,将其复制到新扩容的尾部,同时尾部向前移动
if(chas[i]!=' ') {
chas[j--]=chas[i];
//如果为空,用o2%代替,同时尾部向前移动
}else {
chas[j--]='0';
chas[j--]='2';
chas[j--]='%';
}
}
return String.valueOf(chas);
}
扩展问题:给定一个字符类型的数组chas[],其中只包含数字字符和"*"字符,现在想把所有的"*"字符挪到chas的左边,数字字符挪到chas的右边。请编写函数完成。
public static String modify(char[] chas) {
if(chas==null ||chas.length==0) {
return null;
}
int j=chas.length-1;
for(int i=chas.length-1;i>-1;i--) {
if(chas[i]!='*') {
chas[j--]=chas[i];
}
}
while(j>-1) {
chas[j--]='*';
}
return new String(chas);
}