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';
java replace方法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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论