您的位置:首页 > 职场人生

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

2015-06-27 00:00 543 查看
摘要: 面试需要的基础知识-替换空格

题目

实现一个函数,把字符串中的每个空格替换成"%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));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息