题目:请实现一个函数,把字符串中的每个空格替换成“%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:替换空格的更多相关文章

  1. 【剑指offer】面试题 5. 替换空格

    面试题 5. 替换空格 题目:请实现一个函数,将一个字符串中的空格替换成"%20".例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Hap ...

  2. 剑指Offer:面试题4——替换空格(java实现)

    问题描述:请实现一个函数,把字符串中的每个空格替换成"%20". 例如: 输入:"We are happy." 输出:"We%20are%20happ ...

  3. C++版 - 剑指offer 面试题4: 替换空格 题解

    面试题4:替换空格 提交网址: http://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=1 ...

  4. 剑指offer编程题Java实现——面试题4替换空格

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

  5. 剑指offer-面试题4.替换空格

    题目:请实现一个函数,把字符串中的每个空格都替换成"%20".例如输入"We are happy." 则输出"We%20are%20happy.&qu ...

  6. 剑指offer面试题4 替换空格(java)

    注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 /* * 剑指offer 替换空格 * xsf * */ /*开始替换空格的函数,length为原数 ...

  7. 剑指offer面试题4 替换空格(c)

  8. 面试题04_替换空格_剑指Offer系列

    题目描写叙述 请实现一个函数,将一个字符串中的空格替换成"%20". 比如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题思路 ...

  9. 《剑指offer》面试题4 替换空格 Java版

    (给一个足够长的字符数组,其中有一段字符,将' '(空格)替换成'%' '2' '0'三个字符,原字符段由'\0'结尾) 书中方法:这道题如果从头到尾扫描数组并替换,会涉及到数组的移动.如果不移动元素 ...

  10. 【剑指Offer】面试题05.替换空格

    题目 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 1: 输入:s = "We are happy." 输出:"We%20are ...

随机推荐

  1. CCM加密学习

    这几天终于搞定了AES硬件加密工具的使用,几种简单的加密模式也都实验通过了,比较麻烦的一种是CCM模式的加密,它是CTR加密模式和CMAC认证算法的混合使用.本文先介绍CCM模式的原理与基本实现,然后 ...

  2. Sicily 1068欢迎提出优化方案

    1608. Digit Counting 限制条件 时间限制: 1 秒, 内存限制: 32 兆 题目描述 Trung is bored with his mathematics homeworks. ...

  3. PHP 魔术方法 __sleep __wakeup(四)

    串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP ...

  4. checkBox控件的CheckedChanged与CheckedStateChanged区别

    Checked属性为bool类型,CheckState属性为枚举类型(CheckState.Checked.CheckState.Unchecked和CheckState.Indeterminate) ...

  5. Sublime Text 3 使用备注

    去年开始为了正规化自己的日常编辑工作,在dw,editplus,notap++,st里做了个选择,最终决定改曾经的dw为st. 毕竟dw是上个世纪的东西了,体积比较臃肿了.所以,在这里记录关于st的使 ...

  6. 《C和指针》 读书笔记 -- 第9章 字符串、字符和字节

    1.字符串以NUL结尾,但字符串长度不包括NUl字节. 2.复制字符串 char *strcpy(char *dst,char const *src); 3.连接字符串 char *strcat(ch ...

  7. 利用IDE编写C语言程序的一点注意事项

    前言:我是喜欢编程的一只菜鸟,在自学过程中,对遇到的一些问题和困惑,有时虽有一点体会感悟,但时间一长就会淡忘,很不利于知识的积累.因此,想通过博客园这个平台,一来记录自己的学习体会,二来便于向众多高手 ...

  8. 谈谈java中的WeakReference

    Java语言中为对象的引用分为了四个级别,分别为 强引用 .软引用.弱引用.虚引用. 本文只针对java中的弱引用进行一些分析,如有出入还请多指正. 在分析弱引用之前,先阐述一个概念:什么是对象可到达 ...

  9. Windows.Andy.Code4App.dll Win8.1/WP8.1通用类库@ver1.0.0

    直接入题! Win8.1和WP8.1眼下已经渐渐融为一体,WP8.1不断向Win8.1靠拢,虽然一些方法上WP8.1和Win8.1不同(ps:WP8.1和Win8.1的不同之处),但大部分还是相同的. ...

  10. 0ffice365 Calendar API

    Calendar REST API in Office 365 APIs Preview http://msdn.microsoft.com/EN-US/library/office/dn792114 ...