当前位置:编程学习 > C#/ASP.NET >>

C#中Trim(),TrimStart(),TrimEnd()的实现及用法

Trim的使用方法很简单。今天写一下.NET类库中是如何实现的。这篇文章发首页,让大家检查一下,免的自己一直按错误的理解下去。高手莫笑。
Trim()的功能:从此实例的开始位置和末尾移除空白字符的所有匹配项。
注意点:
(1)Trim 方法从当前字符串移除所有前导空白字符和尾部空白字符。遇到非空白字符时,每个前导裁剪操作和尾部裁剪操作都会停止。
(2)此方法不修改当前实例的值。而是返回一个新字符串,在该字符串中,当前实例中找到的所有前导和尾随空白字符均被移除。
(3)如果当前字符串等于 Empty 或当前实例中的所有字符由空白字符组成,该方法将返回 Empty。
Trim(char[] trimChars)的功能:从此实例的开始和末尾移除数组中指定的一组字符的所有匹配项。
注意点:
(1)从此实例的开始和结尾移除 trimChars 中字符的所有匹配项后剩余的 String。如果 trimChars 为 空引用(在 Visual Basic 中为 Nothing),则改为移除空白字符。
(2)此方法不修改当前实例的值。而是返回一个新字符串,在该字符串中,移除了当前实例中找到的所有前导和尾随 trimChars 字符。
(3)如果当前字符串等于 Empty 或当前实例中的所有字符由 trimChars 数组中的字符组成,该方法将返回 Empty。
 
TrimStart(char[] trimChars)的功能:从当前 String 对象移除数组中指定的一组字符的所有前导匹配项。(注意点与Trim相似)
TrimEnd(char[] trimChars)的功能:从当前 String 对象移除数组中指定的一组字符的所有尾部匹配项。(注意点与Trim相似)
更加详细的内容产看MSDN中Trim方法的讲解。
在.NET 2.0的类库中代码如下:
private const int TrimHead = 0;
private const int TrimTail = 1;
private const int TrimBoth = 2;
public static readonly String Empty = "";
  
 internal static readonly char[] WhitespaceChars =   
           { (char) 0x9, (char) 0xA, (char) 0xB, (char) 0xC, (char) 0xD, (char) 0x20,   (char) 0x85, 
             (char) 0xA0, (char)0x1680,
             (char) 0x2000, (char) 0x2001, (char) 0x2002, (char) 0x2003, (char) 0x2004, (char) 0x2005,
             (char) 0x2006, (char) 0x2007, (char) 0x2008, (char) 0x2009, (char) 0x200A, (char) 0x200B,
             (char) 0x2028, (char) 0x2029,
             (char) 0x3000, (char) 0xFEFF };
Trim()方法:
  public String Trim() {
           return TrimHelper(WhitespaceChars,TrimBoth);        
       }
调用了TrimHelper方法。即TrimHelper(WhitespaceChars,2);  从首尾去除空格。     
TrimHelper方法的实现:
 public String TrimHelper(char[] trimChars, int trimType) {
         //end will point to the first non-trimmed character on the right
         //start will point to the first non-trimmed character on the Left
         int end = this.Length-1;
         int start=0;
 
         //Trim specified characters.
         if (trimType !=TrimTail)  {
             for (start=0; start < this.Length; start++) {
                 int i = 0;
                 char ch = this[start];
                 for( i = 0; i < trimChars.Length; i++) {
                     if( trimChars[i] == ch) break;
                 }
                 if( i == trimChars.Length) { // the character is not white space
                     break;  
                 }
             }
         }
          
         if (trimType !=TrimHead) {
             for (end= Length -1; end >= start;  end--) {
                 int i = 0;    
                 char ch = this[end];                    
                 for(i = 0; i < trimChars.Length; i++) {
                     if( trimChars[i] == ch) break;
                 }
                 if( i == trimChars.Length) { // the character is not white space
                     break;  
                 }                    
             }
         }
 
         //Create a new STRINGREF and initialize it from the range determined above.
         int len = end -start + 1;
         if (len == this.Length) {
             // Don't allocate a new string is the trimmed string has not changed.
             return this;
         }
         else {
             if( len == 0) {
                 return String.Empty;
             }
             return InternalSubString(start, len, false);
         }
     }
  分析以上函数我们知道:
  根据传入的trimType值判断是进行首,尾或者首尾空白字符的移除。
     查看第一个for循环,判断字符串前面遇到的第一个是

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,