¿Cómo trunco ​​una cadena .NET?

Resuelto Steve Guidi asked hace 14 años • 38 respuestas

Me gustaría truncar una cadena de modo que su longitud no sea mayor que un valor determinado. Estoy escribiendo en una tabla de base de datos y quiero asegurarme de que los valores que escribo cumplan con la restricción del tipo de datos de la columna.

Por ejemplo, sería bueno si pudiera escribir lo siguiente:

string NormalizeLength(string value, int maxLength)
{
    return value.Substring(0, maxLength);
}

Desafortunadamente, esto genera una excepción porque maxLengthgeneralmente excede los límites de la cadena value. Por supuesto, podría escribir una función como la siguiente, pero esperaba que ya existiera algo como esto.

string NormalizeLength(string value, int maxLength)
{
    return value.Length <= maxLength ? value : value.Substring(0, maxLength);
} 

¿Dónde está la esquiva API que realiza esta tarea? ¿Hay uno?

Steve Guidi avatar May 06 '10 03:05 Steve Guidi
Aceptado

Desafortunadamente, no existe un Truncate()método en cadena. Tienes que escribir este tipo de lógica tú mismo. Sin embargo, lo que puedes hacer es incluir esto en un método de extensión para no tener que duplicarlo en todas partes:

public static class StringExt
{
    public static string Truncate(this string value, int maxLength)
    {
        if (string.IsNullOrEmpty(value)) return value;
        return value.Length <= maxLength ? value : value.Substring(0, maxLength); 
    }
}

Ahora podemos escribir:

var someString = "...";
someString = someString.Truncate(2);
2021-09-17 Alternativa con sufijo y tipos de referencia que aceptan valores NULL en C#8.
public static class StringExt
{
    public static string? Truncate(this string? value, int maxLength, string truncationSuffix = "…")
    {
        return value?.Length > maxLength
            ? value.Substring(0, maxLength) + truncationSuffix
            : value;
    }
}

Escribir:

"abc".Truncate(2);          // "ab…"
"abc".Truncate(3);          // "abc"
((string)null).Truncate(3); // null
LBushkin avatar May 05 '2010 20:05 LBushkin

O en lugar del operador ternario, podrías usar Math.min

public static class StringExt
{
    public static string Truncate( this string value, int maxLength )
    {
        if (string.IsNullOrEmpty(value)) { return value; }

        return value.Substring(0, Math.Min(value.Length, maxLength));
    }
}
CaffGeek avatar May 05 '2010 20:05 CaffGeek