面试需要的基础知识-替换空格
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)); } }
相关文章推荐
- 非常不错的脚本入侵基础知识总结第1/2页
- AS3 Flex基础知识100条
- Ruby基础知识之方法、代码段
- Lua教程(二):基础知识、类型与值介绍
- PHP程序员面试 切忌急功近利(更需要注重以后的发展)
- C#常见算法面试题小结
- javascript基础知识大集锦(一) 推荐收藏
- C++基础入门教程(一):基础知识大杂烩
- ECMAScript 基础知识
- PHP基础知识介绍
- javascript中的107个基础知识收集整理 推荐
- php 面试碰到过的问题 在此做下记录
- asp.net 面试+笔试题目第1/2页
- javascript真的不难-回顾一下基础知识
- JavaScript 基础知识 被自己遗忘的
- javascript基础知识整理
- Ruby基础知识之数据类型
- shell编程基础知识小结
- PHP程序员必须清楚的问题汇总
- asp.net 面试 笔试题目[附答案]第1/3页