程序员面试指南:字符串的调整与替换

题目:给一个字符类型的数组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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值