nimm die letzten n Zeilen eines Strings c #

8

Ich habe eine Zeichenfolge unbekannter Länge

es ist im Format

%Vor%

ohne wissen wie lange es ist, wie kann ich nur die letzten 10 Zeilen der Zeichenfolge nehmen eine Zeile wird durch "\ n"

getrennt     
user1588670 13.08.2012, 21:53
quelle

6 Antworten

9

Wenn die Zeichenfolge größer wird, wird es wichtiger, Zeichen zu vermeiden, die keine Rolle spielen. Jede Methode, die string.Split verwendet, ist ineffizient, da die gesamte Zeichenfolge verarbeitet werden muss. Eine effiziente Lösung muss von hinten durch die Zeichenfolge laufen. Hier ist ein regelmäßiger Ausdruck Ansatz.

Beachten Sie, dass ein List<string> zurückgegeben wird, da die Ergebnisse vor der Rückgabe umgekehrt werden müssen (daher die Methode Insert )

%Vor%     
Simon MᶜKenzie 14.08.2012, 03:32
quelle
7
%Vor%     
Volma 13.08.2012 22:00
quelle
6

Split() die Zeichenkette in \n , und nimm die letzten 10 Elemente des resultierenden Arrays.

    
Robert Harvey 13.08.2012 21:55
quelle
3

Wenn dies in einer Datei enthalten ist und die Datei besonders groß ist, möchten Sie dies möglicherweise effizient tun. Eine Möglichkeit ist, die Datei rückwärts zu lesen und dann nur die ersten 10 Zeilen zu nehmen. Sie können ein Beispiel für die Verwendung von Jon Skeets Bibliothek MiscUtil sehen, um dies zu tun hier .

%Vor%     
yamen 13.08.2012 22:07
quelle
0

Hier ist eine Möglichkeit, dies zu tun, die den Vorteil hat, dass sie keine Kopien der gesamten Quellzeichenfolge erstellt, was ziemlich effizient ist. Der größte Teil des Codes würde zusammen mit anderen Erweiterungsmethoden für allgemeine Zwecke in einer Klasse platziert werden, sodass das Endergebnis ist, dass Sie es mit einer Codezeile

machen können %Vor%

EDIT: Es wurde darauf hingewiesen, dass dies effizienter sein könnte, da es die gesamte Zeichenfolge iteriert. Ich denke auch, dass RemoveAt (0) mit einer Liste wahrscheinlich auch ineffizient ist. Um dies zu beheben, könnte der Code modifiziert werden, um die Zeichenfolge rückwärts zu durchsuchen. Dies würde die TakeLast-Funktion überflüssig machen, da wir einfach Take verwenden könnten.

    
MikeKulls 13.08.2012 22:18
quelle
0

platzsparender Ansatz

%Vor%     
Omar Gamil 07.12.2013 10:25
quelle

Tags und Links