2013-06-22 19 views
13

Próbowałem następujące:Jak ograniczyć ciąg do określonej długości?

var Title = LongTitle.Substring(0,20) 

To działa, ale nie jeśli longtitle ma długość mniejszą niż 20. W jaki sposób można ograniczyć struny do maksymalnie 20 znaków, ale nie pojawia się błąd, jeśli są one po prostu na przykład 5 znaków?

+4

Sprawdź długość łańcucha, a jeśli jest większa niż 20 znaków obciąć, inaczej zostawić jak jest. – Tim

Odpowiedz

27

Upewnij się, że długość nie przekroczy LongTitle (null sprawdzanie pominięta):

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

To może być przekształcony metodę rozszerzenia:

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); 
    } 
} 

który może być używany jako:

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

Może również sprawdzanie 'null' w metodzie rozszerzenia? –

+1

@UweKeim Dzięki za wskazanie, edytowałem moją odpowiedź – Zbigniew

+1

Ja też użyłem metody przedłużania tego, ale z szacunku dla innych, którzy utrzymują mój kod (i ze względu na zwięzłość), mogę zasugerować bardziej apt metoda signature: Truncate (int maxLength) – Chris

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

+1 - schludny trick :) – Tim

+5

Zauważ, że jest to dość nieefektywne, ponieważ tworzy pośrednią tablicę znaków, która jest natychmiast kopiowana i odrzucana. – Lee

+1

@Lee: Masz rację, ale z małym sznurkiem, to banalne –

5

Jeśli długość ciągu jest większa niż 20, użyj 20, w przeciwnym razie użyj długości.

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

Naucz się używać Math.Min do tego celu. – Chris

7

Najkrótsza, wyrażenie:

var title = longTitle.Substring(0, Math.Min(20, longTitle.Length)) 
Powiązane problemy