剑指Offer-02-空格的替换

题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

package hhy.offer;

/**
 * 空格的替换
 * 
 */
public class Test02 {
	/*
	public static String replaceSpace(StringBuffer str) {
		String newString = str.toString();
		char string[] = newString.toCharArray();
		//采用StringBuffer,判断转化后的数组元素是否包含空格,如果包含空格的话,采用append方法,向result中追加'%20'字符
		StringBuffer result = new StringBuffer();
		int len = strArray.length;
		for (int i = 0; i < len; i++) {
			if (strArray[i] == ' ') {
				result.append("%20");
			}else {
				result.append(strArray[i]);
			}
		}
		return result.toString();
 	}
 	
 	public static void main(String[] args) {
		StringBuffer sb1 = new StringBuffer();
		sb1.append("hello 666");
		System.out.println(replaceSpace(sb1));
		StringBuffer sb2 = new StringBuffer();
		sb2.append("hello666");
		System.out.println(replaceSpace(sb2));
		StringBuffer sb3 = new StringBuffer();
		sb3.append("");
		System.out.println(replaceSpace(sb3));
	}
	
 	*/
	public static String replaceSpace(char string[],int length){
		//首先判断输入是否合法
		if (string == null && string.length < length)
			return null ;
		
		int numberOfBlank = 0;
		for (int i = 0; i < length; i++) {
			if (string[i] == ' ') {
				numberOfBlank++;
			}
		}
		//计算转换后的字符长度
		int newLength = length + numberOfBlank * 2;
		if (newLength > length) {
			return null ;
		}
		int indexOfOrigin = length;
		int indexOfNew = newLength;
		while((indexOfOrigin >=0) && (indexOfNew > indexOfOrigin)){
			if (string[indexOfOrigin] == ' ') {
				string[indexOfNew--] = '0';
				string[indexOfNew--] = '2';
				string[indexOfNew--] = '%';
			}else {
				string[indexOfNew--] = string[indexOfOrigin];
			}
			indexOfOrigin--;
		}
		String result = string.toString();
		return result;
	}
	
	public static void main(String[] args) {
		char[] string = new char[50];
        string[0] = ' ';
        string[1] = 'e';
        string[2] = ' ';
        string[3] = ' ';
        string[4] = 'r';
        string[5] = 'e';
        string[6] = ' ';
        string[7] = ' ';
        int length = string.length;
        System.out.println(replaceSpace(string, length));
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值