300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java字符串替换空格符_字符串替换空格

java字符串替换空格符_字符串替换空格

时间:2019-09-13 10:30:47

相关推荐

java字符串替换空格符_字符串替换空格

题目描述

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

解题思路

老实说,看到这个题目想到的就是字符串替换,但是面试题肯定不是这么简单的,那么怎么在原字符串上进行高效的替换呢?我们的字符串替换,主要的消耗是在移位上,每遇到一个空格,后面的字符串就往后移位,那么之前的移位都没有作用了。我们知道字符串的长度,知道替换字符串的长度,如果还知道空格的多少,那么这个字符串的长度就知道了。知道长度之后,只需要把数据放到响应的位置就可以了。

步骤:

1. 遍历字符串,统计出空格数量

2. 再遍历一次,完成替换

代码实现

普通解法,直接替换字符串

public static string ReplaceSpaceForSimple(stringstr)

{return str.Replace(" ", "%20");

}

精妙解法数据移位

public static string ReplaceSpace(stringstr)

{int count = 0;foreach (var item instr)

{if (item == ' ')

{

count++;

}

}int oLength =str.Length;int length = oLength + count * 2; //"%20".Length-1

char[] tempArray = new char[length]; //新开辟了一个空间

length--;for (int i = oLength - 1; i >= 0; i--)

{if (str[i] == ' ')

{

tempArray[length--] = '0';

tempArray[length--] = '2';

tempArray[length--] = '%';

}else{

tempArray[length--] =str[i];

}

}return new string(tempArray);

}

赋值给另外一个

public static string ReplaceForBS(stringstr) {

StringBuilder sb= newStringBuilder();foreach (var item instr) {if (item == ' ')

{

sb.Append("%20");

}else{

sb.Append(item);

}

}returnsb.ToString();

}

测试

中间空格

[Fact]public voidMiddle()

{string str = "We Are Happy.";

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceSpace(str));

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceForBS(str));

}

View Code

开始空格

[Fact]public voidStart()

{string str = "We Are Happy.";

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceSpace(str));

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceForBS(str));

}

View Code

结束空格

[Fact]public voidEnd()

{string str = "We Are Happy.";

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceSpace(str));

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceForBS(str));

}

多空格

[Fact]public voidMore()

{string str = "We Are Happy.";

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceSpace(str));

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceForBS(str));

}

空字符串

[Fact]public voidEmpty()

{string str = "";

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceSpace(str));

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceForBS(str));

str= " ";

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceSpace(str));

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceForBS(str));

str= " ";

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceSpace(str));

Assert.Equal(Coding002.ReplaceSpaceForSimple(str), Coding002.ReplaceForBS(str));

}

View Code

结果

想入非非:扩展思维,发挥想象

1. 这个题可以扩展为替换其他的数据,不要局限于单一的替换,URL就是ASCII替换

2. 字符串是一种特殊的char[]

3. 熟悉字符串string,stringbuilder

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。