P44、面试题4:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。 |
如果用java string类中提供的replace方法可以很快的进行替换。
代码实现:
package com.yyq; /**
* Created by Administrator on 2015/9/4.
*/
public class ReplaceBlank {
public static void main(String args[]){
String str = "we are happy";
String newStr = str.replace(" ","%20");
System.out.println(newStr);
}
}
如果是按照很原始的方法进行替换的话,里面包含着大技巧。
我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来长度加上2乘以空格数目。从字符串的后面开始复制和替换,直到都走到字符串首位。
代码实现:
package com.yyq; import java.util.Arrays; /**
* Created by Administrator on 2015/9/4.
*/
public class ReplaceBlank {
private static int maxLength = 100; //length 为字符数组string的总容量,新增长的数组长度不能超过length
public static void repalceBlank(String str, int trueLength, int maxLength) {
if (str == null || maxLength <= 0) {
return;
}
//如果是传统的静态数组,java中是不允许动态扩充的,如果需要扩充的话,则需要使用java自带的累积框架,如List
char oldString[] = str.toCharArray();
int numberBlank = 0;
int i = 0;
while (i < trueLength) {
if (oldString[i] == ' ') {
numberBlank++;
}
i++;
} int newLength = trueLength + numberBlank * 2;
//新开辟一个数组
char newString[] = new char[newLength];
for (int j = 0; j < newLength; j++) {
newString[j] = 0;
}
if (newLength > maxLength) {
return;
}
int indexOld = trueLength - 1;
int indexNew = newLength - 1;
while (indexOld >= 0 && indexOld <= indexNew) {
if (oldString[indexOld] == ' ') {
newString[indexNew] = '0';
indexNew--;
newString[indexNew] = '2';
indexNew--;
newString[indexNew] = '%';
indexNew--;
} else {
newString[indexNew--] = oldString[indexOld];
}
indexOld--;
}
System.out.println(new String(newString));
}
public static void Test(String testName, String str) {
if (str == null) return;
if (testName != null) {
System.out.println(testName + "======");
repalceBlank(str, str.length(), maxLength);
}
} // 空格在句子中间
public void Test1()
{
String str = "ab c";
Test("Test1(空格在句子中间)", str);
} // 空格在句子开头
public void Test2()
{
String str = " helloworld";
Test("Test2(空格在句子开头)", str);
} // 空格在句子末尾 public void Test3()
{
String str = "helloworld ";
Test("Test3(空格在句子末尾)", str);
} // 连续有两个空格
public void Test4()
{
String str = "hello world";
Test("Test4(连续有两个空格)", str);
} // 传入NULL
public void Test5()
{
Test("Test5(传入null)", null);
} // 传入内容为空的字符串 public void Test6()
{
String str = "";
Test("Test6传入内容为空的字符串", str);
} //传入内容为一个空格的字符串
public void Test7()
{
String str = " ";
Test("Test7(传入内容为一个空格的字符串)", str);
} // 传入的字符串没有空格
public void Test8()
{
String str = "helloworld";
Test("Test8(传入的字符串没有空格)", str);
} // 传入的字符串全是空格
public void Test9()
{
String str = " ";
Test("Test9(传入的字符串全是空格)", str);
} public static void main(String[] args) {
// TODO Auto-generated method stub
ReplaceBlank test = new ReplaceBlank();
test.Test1();
test.Test2();
test.Test3();
test.Test4();
test.Test5();
test.Test6();
test.Test7();
test.Test8();
test.Test9();
}
}
输出结果:
Test1(空格在句子中间)====== ab%20c Test2(空格在句子开头)====== %20helloworld Test3(空格在句子末尾)====== helloworld%20 Test4(连续有两个空格)====== hello%20%20world Test6传入内容为空的字符串====== Test7(传入内容为一个空格的字符串)====== %20 Test8(传入的字符串没有空格)====== helloworld Test9(传入的字符串全是空格)====== %20%20%20 |
P44、面试题4:替换空格的更多相关文章
- 【剑指offer】面试题 5. 替换空格
面试题 5. 替换空格 题目:请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Hap ...
- 剑指Offer:面试题4——替换空格(java实现)
问题描述:请实现一个函数,把字符串中的每个空格替换成"%20". 例如: 输入:"We are happy." 输出:"We%20are%20happ ...
- C++版 - 剑指offer 面试题4: 替换空格 题解
面试题4:替换空格 提交网址: http://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=1 ...
- 剑指offer编程题Java实现——面试题4替换空格
题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. package Solution; ...
- 剑指offer-面试题4.替换空格
题目:请实现一个函数,把字符串中的每个空格都替换成"%20".例如输入"We are happy." 则输出"We%20are%20happy.&qu ...
- 剑指offer面试题4 替换空格(java)
注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...
- 剑指offer面试题4 替换空格(c)
- 面试题04_替换空格_剑指Offer系列
题目描写叙述 请实现一个函数,将一个字符串中的空格替换成"%20". 比如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题思路 ...
- 《剑指offer》面试题4 替换空格 Java版
(给一个足够长的字符数组,其中有一段字符,将' '(空格)替换成'%' '2' '0'三个字符,原字符段由'\0'结尾) 书中方法:这道题如果从头到尾扫描数组并替换,会涉及到数组的移动.如果不移动元素 ...
- 【剑指Offer】面试题05.替换空格
题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy." 输出:"We%20are ...
随机推荐
- 分类算法之贝叶斯(Bayes)分类器
摘要:旁听了清华大学王建勇老师的 数据挖掘:理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习. 一:贝叶斯分类器简介 1)贝叶斯分类器是一种基于统计的分类器 ...
- JAVASCRIPT实现翻页保存已勾选的项目
<input type="checkbox" name="a" value="1" /><br/> <inpu ...
- NoSQL性能测试:MongoDB VS SequoiaDB
作 为NoSQL的一个重要类型,文档型NoSQL通常被认为是最接近传统关系型数据库的NoSQL.文档型NoSQL的核心是数据嵌套,这种设计可以从某种 程度上大大简化传统数据库复杂的关联问题.同时由于摆 ...
- Openvpn完美解决公司网络没有固定公网IP的问题
方案背景: 公司办公网络使用长城宽带上网有一段时间了,有4个固定IP(2个电信,2个网通),链路不太稳定,经常有问题,因此考虑取消长城宽带,采用原来的adsl上网.但是有个问题,因为公司内网有几台服务 ...
- Kakfa揭秘 Day9 KafkaReceiver源码解析
Kakfa揭秘 Day9 KafkaReceiver源码解析 上一节课中,谈了Direct的方式来访问kafka的Broker,今天主要来谈一下,另一种方式,也就是KafkaReceiver. 初始化 ...
- Kakfa揭秘 Day2 Kafka内核再揭秘
Spark Streaming揭秘 Day33 Kafka内核再揭秘 优秀的框架会把引擎做到极致,Kafka就是这样,让我们再深入一下研究. 设计目标 kafka系统有着比较独特的的设计,包括5点: ...
- s3c-u-boot-1.1.6源码分析
源码 源码结构 移植准备
- MFC VC6++学习笔记
一.mfc中基于对话框程序添加菜单栏 1打开对话框资源,然后右键->属性->常规 里面有个"菜单" 下拉框,然后选择IDM_USER! 2打开对话框,右键属性,选择刚才 ...
- wpf 绑定失效的原因及解决方案
有时候,您会发现在程序开始时还能正常运行的绑定失效了.就个人经验而言,绑定的失效主要分为两种情况:对于One-way绑定而言,如果软件开发人员绕过绑定直接更改了目标属性,那么绑定将会失效.而对于Two ...
- 《WPF程序设计指南》读书笔记——第1章 应用程序与窗口
1.空白WPF项目的创建: 1)新建项目:在VS2010中,文件-新建-项目-visual c#-windows-空项目: 2)添加引用:PresentationFramework,Presentat ...