如何将字符串限制为不超过一定长度?

16 c#

我尝试了以下方法:

var Title = LongTitle.Substring(0,20)
Run Code Online (Sandbox Code Playgroud)

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

Zbi*_*iew 31

确保长度不超过LongTitle(null检查跳过):

int maxLength = Math.Min(LongTitle.Length, 20);
string title = LongTitle.Substring(0, maxLength);
Run Code Online (Sandbox Code Playgroud)

这可以转换为扩展方法:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个可以用作:

string title = LongTitle.Truncate(20);
Run Code Online (Sandbox Code Playgroud)


Age*_*ire 14

最短的,:

var title = longTitle.Substring(0, Math.Min(20, longTitle.Length))
Run Code Online (Sandbox Code Playgroud)


cuo*_*gle 8

string title = new string(LongTitle.Take(20).ToArray());
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是非常低效的,因为它创建了一个中间字符数组,然后立即复制并丢弃. (5认同)
  • @Lee:你是对的,但是用小字符串,它是微不足道的 (2认同)

Pet*_*sen 5

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

string  title = LongTitle.Substring(0,
    (LongTitle.Length > 20 ? 20 : LongTitle.Length));
Run Code Online (Sandbox Code Playgroud)

  • 学习使用Math.Min来实现此目的. (2认同)