码迷,mamicode.com
首页 > 其他好文 > 详细

字符串中替换掉原有的空格

时间:2018-05-06 22:54:00      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:tchar   style   AC   问题   现在   分享图片   复杂   方法   替换字符串   

一:程序的主题

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<len;i++) {
14             if(str.charAt(i)!=‘ ‘) {
15                 str2.append(str.charAt(i));
16             }else {
17                 str2.append("%20");
18             }
19         }
20         
21         return str2.toString();
22     }
23 
24 }

 

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<str.length();i++){
14             if(str.charAt(i)==‘ ‘)
15                 spacenum++;
16         }
17         //indexold为为替换前的str下标
18         int indexold = str.length()-1; 
19         //计算空格转换成%20之后的str长度
20         int newlength = str.length() + spacenum*2;
21         //indexold为为把空格替换为%20后的str下标
22         int indexnew = newlength-1;
23         //使str的长度扩大到转换成%20之后的长度,防止下标越界
24         str.setLength(newlength);
25         for(;indexold>=0 && indexold<newlength;--indexold){
26             if(str.charAt(indexold) == ‘ ‘){
27                 str.setCharAt(indexnew--, ‘0‘);
28                 str.setCharAt(indexnew--, ‘2‘);
29                 str.setCharAt(indexnew--, ‘%‘);
30             }else{
31                 str.setCharAt(indexnew--, str.charAt(indexold));
32             }
33         }
34         return str.toString();
35     }
36 
37 }

 

5.分析

  && indexold<newlength

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

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

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

 

 

 

 

 

字符串中替换掉原有的空格

标签:tchar   style   AC   问题   现在   分享图片   复杂   方法   替换字符串   

原文地址:https://www.cnblogs.com/juncaoit/p/9000125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!