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

一:程序的主题

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已经相同的,就不要再移动了,就可以降低时间复杂度。

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

时间: 2024-08-04 14:36:50

字符串中替换掉原有的空格的相关文章

将字符串中连续的多个空格替换成一个空格

一,问题描述: 给定一个字符串,将字符串中连续的多个空格替换成一个空格. 如:"Hello   World I      come from china"----->"Hello World I come from china" 二,思路: 逐个字符扫描字符串,遇到连续多个空格时,只添加第一个空格.遇到非空格字符时,添加该字符.使用StringBuilder的add()方法添加字符. 需要一个boolean 变量指示是否是第一个空格.当遇到空格且该空格是第一个

用正则在字符串中替换

replace的第四个形式就是接收正则表达式,但是注意,最后一个参数必须是0或者1,否则第二个参数不会被看作正则. 下面是一个例子: > (replace "<table.*?>[\\s\\S]*?</table>" "abcd<table border=\"1px\">fff</table>" "" 0) "abcd" 0 表示是PCRE正则 1 表示

统计字符串中数字,字母,空格的个数

这是C语言课后的一道习题,网上可以找到很多相关的代码,都可以很好的基本完成题目要求 但是,我发现很多的代码都无法实现统计字符串中大于10的数字(只局限于统计0-9之间的数字) 此程序可以改进具有十位,百位,千位,甚至更大的数字的统计: #include<stdio.h> int main() { char a[50] ="1 2 3 a b c d @ 15 21 19 88 r 78 100 189 1598 46"; int i,j; int d = 0, c = 0,

合并字符串中连续的多个空格的C代码实现

1.问题描述 将某一字符串中连续出现的多个空格合并为一个空格,如果合并之后的字符串的首尾有空格,则将其去掉. 例如," This is a string! "是一个包含多个空格的字符串,要求其变成"This is a string!"的形式. 2.C代码实现 /********************************************************************** * 版权所有 (C)2015, Zhou Zhaoxiong. *

编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,用空格来分隔单词。

char str[255] = {0}; printf("请输入一个字符串:\n"); scanf("%[^\n]", str);//意思是非'\n'.也就是说只要没有遇到换行就继续输入,当遇到换行符的时候此语句结束.而默认情况是遇到换行语句执行结束,但是str的值只是第一个空格前的值.但这样写,按回车时scanf执行完,中间所有内容包括空格都会输入到str中去. // gets(str); int maxLength = 0, maxIndex = 0; int

字符串中替换某个字符

/* 第6题 字符串内所有a都替换成A; */ NSString *[email protected]"whatareyou"; str7=[str7 stringByReplacingOccurrencesOfString:@"a" withString:@"A"]; NSLog(@"第六题:\n"); NSLog(@"%@",str7);

php 将字符串中的连续多个空格转换为一个空格

转载自:http://www.phpernote.com/php-function/633.html /** * 多个连续空格只保留一个 * * @param string $string 待转换的字符串 * @return string $string 转换后的字符串 */ function merge_spaces($string){ return preg_replace("/\s(?=\s)/","\\1",$string); }

PHP删除字符串中的空格和换行符 将字符串中的连续多个空格转换为一个空格

//删除空格和回车 function trimall($str){ $qian=array(" "," ","\t","\n","\r"); return str_replace($qian, '', $str); } //多个连续空格只保留一个 function merge_spaces($string){ return preg_replace("/\s(?=\s)/","

编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格,和其他字符的个数,在主函数中输入字符串以及输出上述统计的结果。再考虑将算的的结果放在一个数组中

#include<stdio.h> #include<string.h> int f(int g,char s[],int h[]) { int i,a=0,b=0,c=0,d=0; for(i=0;i<g;i++) { if(s[i]>='a'&&s[i]<='z') h[0]++; else if(s[i]>='0'&&s[i]<='9') h[1]++; else if(s[i]==' ') h[2]++; els