面试需要的基础知识-替换空格

题目

实现一个函数,把字符串中的每个空格替换成"%20".例如输入"We are happy.",则输出"We%20are%20happy."。要求不创建新的内存而在原来的字符串上进行替换。

解题思路

先遍历一次字符串,计算出字符串中的空格数目,由此可计算出替换后的字符串的总长度。然后从字符串的末尾开始查找空格,如果是空格则替换为%20。

实现代码

/**
 * 
 */
package com.jason.interviewQuestions.basicKnowledge;

/**
 * 实现一个函数,把字符串中的每个空格替换成"%20".例如输入"We are happy.",则输出"We%20are%20happy."。要求不创建新的内存而在原来的字符串上进行替换。
 * @author jason zhang
 *
 */
public class ReplaceBlank {

	/**
	 * 
	 * @param string 字符串数组
	 * @param originalLength 原始字符串的长度
	 * @param newLength 新的字符串的长度
	 */
	void replace(char[] string, int originalLength, int newLength) {
		if (string == null && originalLength <= 0) {
			return;
		}
		if (newLength <= originalLength) {
			return;
		}
		int indexOfOriginal = originalLength - 1;
		int indexOfNew = newLength - 1;
		while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) {
			if (string[indexOfOriginal] == ' ') {
				string[indexOfNew--] = '0';
				string[indexOfNew--] = '2';
				string[indexOfNew--] = '%';
			} else {
				string[indexOfNew--] = string[indexOfOriginal];
			}
			indexOfOriginal--;
		}
	}
}

测试代码

/**
 * 
 */
package com.jason.interviewQuestions.basicKnowledge;

import junit.framework.TestCase;

/**
 * @author lenovo
 *
 */
public class ReplaceBlankTest extends TestCase {
	
	private ReplaceBlank rb;

	/* (non-Javadoc)
	 * @see junit.framework.TestCase#setUp()
	 */
	protected void setUp() throws Exception {
		super.setUp();
		rb = new ReplaceBlank();
	}

	/**
	 * Test method for {@link com.jason.interviewQuestions.basicKnowledge.ReplaceBlank#replace(char[], int, int)}.
	 */
	public void testReplace() {
		//由于java中的String中的内容是不可变的,所以要使用String来实现这个题目是不可能的,需要把String类型的字符串转化成char数组来实现这个题目
		String s = "We are happy.";
		char[] cs = s.toCharArray();
		//计算字符串中空格的数目及新的字符串数组的长度
		int originalLength = 0;
		int numberOfBlank = 0;
		for (char c : cs) {
			originalLength++;
			if (c == ' ') {
				numberOfBlank++;
			}
		}
		int newLength = originalLength + numberOfBlank*2;
		//创建新的字符串数组
		char[] newcs = new char[newLength];
		//把原来的字符串数组拷贝到新的字符串数组中
		System.arraycopy(cs, 0, newcs, 0, originalLength);
		this.rb.replace(newcs, originalLength, newLength);
		super.assertEquals("We%20are%20happy.", new String(newcs));
	}

}


你可能感兴趣的:(面试,基础知识,替换空格)