Как удалить первые строки n строк в строке?Как удалить первые n строк в строке на C#?
Пример:
String str = @"a
b
c
d
e";
String output = DeleteLines(str, 2)
//Output is "c
//d
//e"
Как удалить первые строки n строк в строке?Как удалить первые n строк в строке на C#?
Пример:
String str = @"a
b
c
d
e";
String output = DeleteLines(str, 2)
//Output is "c
//d
//e"
Комбинация Get the index of the nth occurrence of a string? (поиск) и Environment.NewLine подстроки должны сделать трюк.
Вы можете использовать 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"
избили меня, но вам нужно 'StringSplitOptions.RemoveEmptyEntries', так как Split интерпретирует \ r и \ n отдельно – Marlon
@Marlon - Я не уверен, что удаление вопроса было вопросом в вопросе. Я полагал, что это не так, поскольку вопрос фокусируется на строках, а не на символах/словах. – Omar
вы курили из всего этого в одной нечитаемой строке? Позвоните, чтобы использовать LINQ? ;) – Massif
Попробуйте следующее:
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;
}
Примечание: Этот метод не подходит для очень длинных строк многострочных как он не считает управление памятью. Если вы имеете дело с этими типами строк, я предлагаю вам изменить метод использования класса StringBuilder.
Почему бы просто не найти nth '\ n' и сделать одну подстроку с этой точки дальше. Поэтому многие из вышеперечисленных ответов действительно неэффективны, я ожидал, что это сделает это простым способом. Я вижу, что это был ответ @ Lukáš Novotný (он ссылался, но не повторял здесь). –
Попробуйте следующее:
public static string DeleteLines(string s, int linesToRemove)
{
return s.Split(Environment.NewLine.ToCharArray(),
linesToRemove + 1
).Skip(linesToRemove)
.FirstOrDefault();
}
следующий пример:
string str = @"a
b
c
d
e";
string output = DeleteLines(str, 2);
возвращает
c
d
e
Если вам нужно принять во внимание "\ г \ п" и «\ r "и" \ n ", лучше использовать следующее регулярное выражение:
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 более подробная информация о разбиении текста на строки.
С возможностью удаления первые п линии или последней п линии:
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;
}
Попробуйте это:
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;
}
Это может быть не очень эффективным, но она прекрасно работает для самых маленьких проект, над которым я недавно работал
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);
}
Лучше включить некоторый контекст/объяснение с кодом, поскольку это делает ответ более полезным для OP и для будущих читателей (тем более, что это старый вопрос, который уже содержит несколько других высококачественных ответов). – EJoshuaS
Не могли бы вы вставить соответствующие биты ответа, который вы упомянули в своем ответе? –