代码改变世界

[C#]我对Trim()、TrimStart()、TrimEnd()的错误认识

2010-12-07 11:43  何朝阳  阅读(967)  评论(0编辑  收藏  举报

这三个方法用于删除字符串头尾出现的某些字符。Trim()删除字符串头部及尾部出现的空格,删除的过程为从外到内,直到碰到一个非空格的字符为止,所以不管前后有多少个连续的空格都会被删除掉。TrimStart()只删除字符串的头部的空格。TrimEnd()只删除字符串尾部的空格。

如果这三个函数带上字符型数组的参数,则是删除字符型数组中出现的任意字符。如Trim("abcd".ToCharArray())就是删除字符串头部及尾部出现的a或b或c或d字符,删除的过程直到碰到一个既不是a也不是b也不是c也不是d的字符才结束。 

这里最容易引起的误会就是以为删除的是"abcd"字符串。如下例:

string ClassID = "2005030401<hr class='h2' />2005030402<hr class='h2' />";
ClassID = ClassID.TrimEnd("<hr class='h2' />".ToCharArray());

我的目的是删除最后的那根水平线,当时也确实是用的这种方法,并没有觉得有什么不妥,直到系统运行后,一天老师给我说班号显示不全,而其他有些又是对的,我百思不得其解,根本没想到是这里除了问题,后来调试了好几次才发现,关键就在于“<hr class='h2' />”和“2005030402”都有个“2”,而且中间没其它字符,所以结果是“2005030401<hr class='h2' />200503040”,而不是“2005030401<hr class='h2' />2005030402”。需要注意的是这种写法执行的删除对象是字符数组中出现的任意字符,而不是这些字符连在一起组成的字符串! 

其实,其实上面这个例子也可以这样实现:

ClassID = ClassID.Substring(0, ClassID.LastIndexOf("<"));