你或许知道你能使用String.Trim()方法,去除字符串的头和尾的空格。不幸运的是,这个Trim方法不能去除字符串中间的C#空格。
事实上,C#提供了多种方法清除字符串中的空格,我们分述如下。
首先,我们最容易想到的当然是Trim()方法,示例代码如下:
的确,Trim() 方法只能去除字符串首尾的空格。
上面代码运行的结果显示为:aa a
那么,我们如何去掉字符串中间的空格呢?
我们可能想到的算法是:以空格为分隔符,将原字符串转换为数组,再遍历数组并且重新拼接为一个新的字符串。理论上,这是没有问题的。示例代码如下:
我们看到demo2的代码数量明显增加了,并且,新增了一个数组对象和一个新字符串对象,并且使用了两次转换(字符串转数组和数组元素重新拼接位字符串),这样操作显然会影响代码的性能,如果字符串的长度足够大,这个方法就需要斟酌了。
那么,C#有没有一个直接清除字符串任意位置空格的方法呢?
答案是肯定的,我们可以使用替换函数 Replace() 来实现。示例代码如下:
上面代码运行的结果,显示为:Thisiswhatmyteststringlookslike
哈哈,这个看起来效率不错啊!
事实上,有同学已经做过测试,在多种替换(清除空格)的方案中,Replace()的确是效率最高的。
但是,请注意,使用Replace()的时候,我们需要特别注意一点,Replace()函数不会直接改变原来字符串的值,而是返回一个经过替换操作以后的新值。所以,使用的时候,通常会把它再赋值给原来的字符串对象,例如上面的案例。
还有一种情况,如果我们需要操作的对象不是一个简短的字符串,而是一个长文本,其中可能包含回车、tab以及空行等等,都需要一并清除,怎么办?
这里告诉大家一个简单方法,因为Replace()支持嵌套操作,那么,我们就可以连续使用该方法直接使用目标字符串(空字符串)替换掉它们。代码如下图示:
上面的代码运行的结果,同样显示为:Thisiswhatmyteststringlookslike
好了,从这个问题的答案中,我们能体会到,一个看似简单的问题,总有多种算法实现。
我们一直倡导,作为程序员,我们要培养自己在代码问题上拥有“强迫症”的习惯,努力寻找最佳的解决方案。这样,我们编程的水平也才能不断精进。