stringa - classe string c#



Quale metodo nella classe String restituisce solo i primi N caratteri? (6)

Mi piacerebbe scrivere un metodo di estensione alla classe String modo che se la stringa di input è più lunga della lunghezza N prevista, devono essere visualizzati solo i primi N caratteri.

Ecco come appare:

public static string TruncateLongString(this string str, int maxLength)
{
    if (str.Length <= maxLength)
        return str;
    else
        //return the first maxLength characters                
}

Che metodo String.*() Posso utilizzare per ottenere solo i primi N caratteri di str ?


Answer #1

Ogni volta che devo fare manipolazioni di stringhe in C #, mi mancano le buone vecchie funzioni Left e Right di Visual Basic, che sono molto più semplici da usare rispetto a Substring .

Pertanto, nella maggior parte dei miei progetti C #, creo per loro metodi di estensione:

public static class StringExtensions
{
    public static string Left(this string str, int length)
    {
        return str.Substring(0, Math.Min(length, str.Length));
    }

    public static string Right(this string str, int length)
    {
        return str.Substring(str.Length - Math.Min(length, str.Length));
    }
}

Nota:
La parte Math.Min è presente perché la Substring genera Substring ArgumentOutOfRangeException quando la lunghezza della stringa di input è inferiore alla lunghezza richiesta, come già menzionato in alcuni commenti nelle risposte precedenti.

Uso:

string longString = "Long String";

// returns "Long";
string left1 = longString.Left(4);

// returns "Long String";
string left2 = longString.Left(100);

Answer #2

Puoi usare LINQ str.Take(n) o str.SubString(0, n) , dove quest'ultimo genererà un'eccezione ArgumentOutOfRangeException per n > str.Length .

Ricorda che la versione LINQ restituisce un IEnumerable<char> , quindi devi convertire IEnumerable<char> in string : new string(s.Take(n).ToArray()) .


Answer #3

se parliamo di convalide anche perché non abbiamo controllato le voci di stringa nulla. Qualche ragione specifica?

Penso che sotto la guida di modo poiché IsNullOrEmpty è un metodo definito dal sistema e gli operatori ternari hanno complessità ciclomatic = 1 mentre if () {} else {} ha valore 2.

    public static string Truncate(string input, int truncLength)
    {
        return (!String.IsNullOrEmpty(input) && input.Length >= truncLength)
                   ? input.Substring(0, truncLength)
                   : input;
    }

Answer #4

string.Substring (0, n); // 0 - avvia indice e n - numero di caratteri


Answer #5
public static string TruncateLongString(this string str, int maxLength)
{
    return str.Length <= maxLength ? str : str.Remove(maxLength);
}

Answer #6
string truncatedToNLength = new string(s.Take(n).ToArray());  

Questa soluzione ha un piccolo vantaggio nel fatto che se n è maggiore di s.Length, fa ancora la cosa giusta.





character