博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
001 字符串中替换掉原有的空格
阅读量:7081 次
发布时间:2019-06-28

本文共 2389 字,大约阅读时间需要 7 分钟。

一:程序的主题

1.题目

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

 

2.我的程序

1 package com.jianke.it; 2  3 public class ReplaceSpace { 4  5     public static void main(String[] args) { 6         StringBuffer str=new StringBuffer("We Are Happy"); 7         String result=replaceSpace(str); 8         System.out.println(result); 9     }10     public static String replaceSpace(StringBuffer str) {11         StringBuffer str2=new StringBuffer();12         int len=str.length();13         for(int i=0;i

 

3.效果

  

 

4.程序二

问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!
问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。
      
从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下
      
从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
结论:我的方法是新开辟了一个字符串,这个方法是在原有的基础上进行修改。
1 package com.jianke.it; 2  3 public class ReplaceSpace { 4  5     public static void main(String[] args) { 6         StringBuffer str=new StringBuffer("We Are Happy"); 7         String result=replaceSpace(str); 8         System.out.println(result); 9     }10     public static String replaceSpace(StringBuffer str) {11         //spacenum为计算空格数12         int spacenum = 0;13         for(int i=0;i
=0 && indexold

 

5.分析

  1.&& indexold<newlength

    主要分析一下这个条件,如果不要也不会由问题,但是,现在为什么还要加。

    我思考了一下,是这样的:

    如果,后面的空格已经补充完了之后,这个时候的indexold与indexnew已经相同的,就不要再移动了,就可以降低时间复杂度。

  2.注意点

    要设置str的长度,不然会越界。

 

6.程序三

/*

思路

使用string中的正则表达式

*/

1 package com.jianke.it; 2  3 public class ReplaceSpace { 4  5     public static void main(String[] args) { 6         StringBuffer str=new StringBuffer("We Are Happy"); 7         String result=replaceSpace(str);         8         System.out.println(result); 9         10     }11     public static String replaceSpace(StringBuffer str) {    12         return str.toString().replaceAll("\\s", "%20");13     }14     15 }

 

7.分析

  \s在正则里就表示空白符

  用\\s是因为所使用的工具\本身就具有转义的功能,比如\b表示退格符,在正则中\b(不在中括号中)表示单词边界,要将字符串\b传给正则就得首先对\转义 ,用\\表示 \, \\b表示\b
  同理在这些\本身具有转义作用的工具中,要将字符串\s传给正则用要\\s

 

  下面的方式也可以:

1 return str.toString().replaceAll(" ", "\\%20");2 return str.toString().replaceAll(" ", "%20");

 

二:补充知识

1.StringBuffer与StringBuilder  

  StringBuffer 和 StringBuilder 长度可变

  StringBuffer 线程安全 StringBuilder 线程不安全,因此StringBuilder 速度快

 

2.StringBuffer比String多的独特方法

  

 

3.在StringBuffer中常用的还有下面的方法

  void setLength(int newLength):设置str的长度

  void setCharAt(int index, char ch):将index处设置为ch

  char charAt(int index):返回str中index处的char值

 

 

 

 

 

转载地址:http://dvlml.baihongyu.com/

你可能感兴趣的文章
第一个UG练习
查看>>
黄聪:php计算获取页面执行时间
查看>>
iOS 三种定时器
查看>>
[状压DP][二分]JZOJ 3521 道路覆盖
查看>>
【错误】 “=” 与 "==" 不分
查看>>
Java技术回顾之JNDI:命名和目录服务基本概念(转)
查看>>
0622 总结与回顾
查看>>
[转]SharePoint 2010 Download as Zip File Custom Ribbon Action
查看>>
面向对象-对象和类
查看>>
ROS系统玩转自主移动机器人(4)-- 嵌入式硬件平台
查看>>
[转]Python 资源大全中文版
查看>>
Unlock PeopleSoft Objects All at Once
查看>>
style定义
查看>>
在服务器上搭建git仓库
查看>>
五子棋js
查看>>
ansible命令
查看>>
六种设计原则
查看>>
怎么查看被占用的端口号
查看>>
输入十个数,最大的数和第最后一个数对换,最小的数和第一个数字对换
查看>>
Linux指令--mv
查看>>