题目描述

   请实现一个函数,把字符串中的每个空格替换成"%20"。
例如输入“We are happy.”,则输出“We%20are%20happy.”。

思路分析

  1. Java中实现字符的替换可以使用String内置的函数replaceAll
  2. 考虑不用Java中的函数实现:根据牛客网练习题中所定义的函数中参数为StringBuffer,返回值为String。
  3. 整体思路就是 先计算出字符串替换空格之后的长度,设置两个索引,旧索引指向原来字符串的末尾新的索引指向变长之后字符串的末尾旧索引从后往前开始扫描,将字符串的值依次赋给新索引位置,如果遇到空格,新索引依次赋值为%20,继续扫描。。

Java代码

public class Offer005 {
public static void main(String[] args) {
StringBuffer str = new StringBuffer("We are no happy");
System.out.println(Offer005.replaceSpace(str)); }
public static String replaceSpace(StringBuffer str) {
return Solution2(str);
}
private static String Solution1(StringBuffer str) {
if (str == null) {
throw new IllegalArgumentException("参数非法!");
}
int length = str.length();
int indexOfOrig = length - 1;// 旧的索引位置指向 旧的字符串末尾
// 获取替换空格后的总长度
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
length += 2; // 因为要把空格替换成"%20",每次出现空格就要将长度增加2
}
}
str.setLength(length);// 设置新的str长度
int indexOfNew = length - 1;// 新的索引位置指向 新的字符串末尾
while (indexOfNew > indexOfOrig) {
if (str.charAt(indexOfOrig) != ' ') {
str.setCharAt(indexOfNew--, str.charAt(indexOfOrig));
} else {
str.setCharAt(indexOfNew--, '0');
str.setCharAt(indexOfNew--, '2');
str.setCharAt(indexOfNew--, '%');
}
indexOfOrig--;
}
return str.toString();
}
private static String Solution2(StringBuffer str) {
return str.toString().replaceAll(" ", "%20");
}
}

代码链接

剑指Offer代码-Java

最新文章

  1. 如何在 Java 中正确使用 wait, notify 和 notifyAll(转)
  2. 关于C++中的cout
  3. 相机标定:Matlab标定工具箱使用要点
  4. 树型hierarchyid类型
  5. yum install nginx
  6. 迭代接口的IEnumerator
  7. zstu.4014.水手分椰子(数学推导)
  8. MySQL安装之zip格式
  9. Windows下编译Python2.7源码
  10. Material使用03 MdCardModule模块、MdInputModule模块
  11. String之常量池小结
  12. ILRuntime_NewbieGuide—导读
  13. 前端可视化数据--echarts
  14. java UCnter 单点登录 对接。
  15. windows安装redis的正确姿势
  16. nodejs 使用mysql 进行查询的问题
  17. 解决 django 博客归档 “Are time zone definitions for your database and pytz installed?”的错误
  18. linux系统下安装nginx
  19. 532 -数组中的K-diff对
  20. Selenium2+python自动化49-判断文本(text_to_be_present_in_element)

热门文章

  1. 结构型设计模式——适配器模式(Go)
  2. Linux lsof工具介绍
  3. 996工作制?不如花点时间学知识!北栀暗影教你如何用WordPress搭建专业网站
  4. (二十二)c#Winform自定义控件-半透明窗体
  5. python案例:实现一个函数版的名片管理系统
  6. 微信小程序商城系统怎样搭建?
  7. 驰骋工作流引擎ccflow-流转自定义功能使用说明
  8. StudyAndroid.2 Activity生命周期
  9. 因为配置了Always-On导致的无法Drop Login...
  10. Mybatis实现一对一查询 对ResultType和ResultMap分析