2013-06-22 133 views
13

我试过如下:我怎样才能限制一个字符串不超过一定的长度?

var Title = LongTitle.Substring(0,20) 

这工作但如果LongTitle小于20的长度如何限制字符串最多20个字符,但如果他们只是例如不得到一个错误5个字符长?

+4

检查字符串的长度,如果是超过20个字符截断,否则保留原样。 – Tim

回答

27

确保长度不会超过LongTitlenull检查跳过):

int maxLength = Math.Min(LongTitle.Length, 20); 
string title = LongTitle.Substring(0, maxLength); 

这可以变成扩展方法:

public static class StringExtensions 
{ 

    /// <summary> 
    /// Truncates string so that it is no longer than the specified number of characters. 
    /// </summary> 
    /// <param name="str">String to truncate.</param> 
    /// <param name="length">Maximum string length.</param> 
    /// <returns>Original string or a truncated one if the original was too long.</returns> 
    public static string Truncate(this string str, int length) 
    { 
     if(length < 0) 
     { 
      throw new ArgumentOutOfRangeException("length", "Length must be >= 0"); 
     } 

     if (str == null) 
     { 
      return null; 
     } 

     int maxLength = Math.Min(str.Length, length); 
     return str.Substring(0, maxLength); 
    } 
} 

哪些可以作为:

string title = LongTitle.Truncate(20); 
+0

也许在扩展方法中检查'null'? –

+1

@UweKeim感谢您指出它,我编辑了我的答案 – Zbigniew

+1

我也使用了扩展方法,但是出于对维护我的代码的其他人的尊重(为了简洁起见),我可能会建议更适合方法签名:截断(int maxLength) – Chris

8
string title = new string(LongTitle.Take(20).ToArray()); 
+6

+1 - 巧妙的技巧:) – Tim

+5

注意这是非常低效的,因为它创建了一个中间字符数组,然后立即复制并丢弃它。 – Lee

+1

@李:你说得对,但是用小字符串,这很简单 –

5

如果字符串长度大于20,则使用20,否则使用长度。

string title = LongTitle.Substring(0, 
    (LongTitle.Length > 20 ? 20 : LongTitle.Length)); 
+1

学习使用Math.Min来达到这个目的。 – Chris

相关问题