【问题标题】:How can I limit a string to no more than a certain length? [duplicate]如何将字符串限制为不超过一定长度? [复制]
【发布时间】:2013-06-22 10:18:02
【问题描述】:

我尝试了以下方法:

var Title = LongTitle.Substring(0,20)

这有效,但如果 LongTitle 的长度小于 20,则无效。如何将字符串限制为最多 20 个字符,但如果它们只是例如 5 个字符长,则不会出现错误?

【问题讨论】:

  • 检查字符串的长度,大于20个字符截断,否则保持原样。

标签: c#


【解决方案1】:

确保长度不会超过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(nameof(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);

【讨论】:

  • 也许还要在扩展方法中检查null
  • @UweKeim 感谢您的指点,我已经编辑了我的答案
  • 我也为此使用了扩展方法,但出于对维护我代码的其他人的尊重(并且为了简洁起见),我是否建议使用更贴切的方法签名:Truncate(int maxLength )
  • @Chris 是的,这确实是这个方法更好的名称 :) 谢谢
  • 长度也可以是可选参数。
【解决方案2】:

最短的是:

var title = longTitle.Substring(0, Math.Min(20, longTitle.Length))

【讨论】:

    【解决方案3】:
    string title = new string(LongTitle.Take(20).ToArray());
    

    【讨论】:

    • 请注意,这是非常低效的,因为它会创建一个中间字符数组,然后立即复制并丢弃该数组。
    • @Lee:你是对的,但是用小字符串,这是微不足道的
    【解决方案4】:

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

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

    【讨论】:

    • 为此目的学习使用 Math.Min。
    【解决方案5】:

    您可以使用 StringLength 属性。这样就不能存储比指定长度更长(或更短)的字符串。

    见:http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.stringlengthattribute%28v=vs.100%29.aspx

    [StringLength(20, ErrorMessage = "Your Message")]
    public string LongTitle;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      相关资源
      最近更新 更多