Come posso eliminare i primi n linee in una stringa?Come posso eliminare le prime n righe in una stringa in C#?
Esempio:
String str = @"a
b
c
d
e";
String output = DeleteLines(str, 2)
//Output is "c
//d
//e"
Come posso eliminare i primi n linee in una stringa?Come posso eliminare le prime n righe in una stringa in C#?
Esempio:
String str = @"a
b
c
d
e";
String output = DeleteLines(str, 2)
//Output is "c
//d
//e"
Combinazione di Get the index of the nth occurrence of a string? (ricerca di Environment.NewLine) e substring dovrebbe fare il trucco.
È possibile utilizzare LINQ:
String str = @"a
b
c
d
e";
int n = 2;
string[] lines = str
.Split(Environment.NewLine.ToCharArray())
.Skip(n)
.ToArray();
string output = string.Join(Environment.NewLine, lines);
// Output is
// "c
// d
// e"
mi ha battuto ad esso, ma è necessario 'StringSplitOptions.RemoveEmptyEntries' dal Split interpreta \ r \ n separatamente – Marlon
@Marlon - io non sono sicuro se la rimozione di voci vuote era un requisito in questione. Ho pensato che non era da quando la domanda si concentrava sulle linee e non sui personaggi/parole. – Omar
ti sei beccato per aver preso tutto in una riga illeggibile? Chiamare un uso corretto di LINQ? ;) – Massif
provare quanto segue:
private static string DeleteLines(string input, int lines)
{
var result = input;
for(var i = 0; i < lines; i++)
{
var idx = result.IndexOf('\n');
if (idx < 0)
{
// do what you want when there are less than the required lines
return string.Empty;
}
result = result.Substring(idx+1);
}
return result;
}
Nota: Questo metodo non è ideale per estremamente lunghe stringhe multilinea in quanto non considera la gestione della memoria. Se si ha a che fare con questo tipo di stringhe, suggerisco di modificare il metodo per usare la classe StringBuilder.
Perché non trovare l'ennesimo '\ n' e fare una singola sottostringa da quel punto in poi. Molte delle risposte di cui sopra sono davvero inefficienti. Mi aspettavo che questo lo facesse nel modo più semplice. Vedo che è stata la risposta di @ Lukáš Novotný (si è riferito, ma non si è ripetuto qui). –
Provare quanto segue:
public static string DeleteLines(string s, int linesToRemove)
{
return s.Split(Environment.NewLine.ToCharArray(),
linesToRemove + 1
).Skip(linesToRemove)
.FirstOrDefault();
}
l'esempio successivo:
string str = @"a
b
c
d
e";
string output = DeleteLines(str, 2);
rendimenti
c
d
e
Se avete bisogno di prendere in considerazione "\ r \ n" e "\ r" e '\ n' è meglio utilizzare la seguente espressione regolare:
public static class StringExtensions
{
public static string RemoveFirstLines(string text, int linesCount)
{
var lines = Regex.Split(text, "\r\n|\r|\n").Skip(linesCount);
return string.Join(Environment.NewLine, lines.ToArray());
}
}
Here sono alcuni ulteriori dettagli sul testo dividendosi in linee.
Con possibilità di cancellare primi n linee o ultimi n linee:
public static string DeleteLines(
string stringToRemoveLinesFrom,
int numberOfLinesToRemove,
bool startFromBottom = false) {
string toReturn = "";
string[] allLines = stringToRemoveLinesFrom.Split(
separator: Environment.NewLine.ToCharArray(),
options: StringSplitOptions.RemoveEmptyEntries);
if (startFromBottom)
toReturn = String.Join(Environment.NewLine, allLines.Take(allLines.Length - numberOfLinesToRemove));
else
toReturn = String.Join(Environment.NewLine, allLines.Skip(numberOfLinesToRemove));
return toReturn;
}
Prova questo:
public static string DeleteLines (string text, int lineCount) {
while (text.Split('\n').Length > lineCount)
text = text.Remove(0, text.Split('\n')[0].Length + 1);
return text;
}
Potrebbe non essere molto efficiente, ma funziona perfettamente per il piccolo progetto a cui ho lavorato di recente
public static string DeleteLines(string input, int linesToSkip)
{
int startIndex = 0;
for (int i = 0; i < linesToSkip; ++i)
startIndex = input.IndexOf('\n', startIndex) + 1;
return input.Substring(startIndex);
}
E 'meglio includere po' di contesto/spiegazione con codice come questo rende la risposta più utile per il PO e per i lettori futuri (soprattutto perché questa è una vecchia questione che ha già diverse altre risposte di alta qualità). – EJoshuaS
Potresti incollare i bit rilevanti della risposta che hai citato nella tua risposta? –