Ответ 1
List<string> newStr = str.Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList();
Это приведет к тому, что последовательные строки новой строки будут пустыми (см. StringSplitOptions)
Мне нужно часто преобразовать "строковый блок" (строка, содержащая возвращаемые символы, например, из файла или TextBox) в List<string>
.
Что представляет собой более элегантный способ сделать это, чем метод ConvertBlockToLines ниже?
using System;
using System.Collections.Generic;
using System.Linq;
namespace TestConvert9922
{
class Program
{
static void Main(string[] args)
{
string testBlock = "line one" + Environment.NewLine +
"line two" + Environment.NewLine +
"line three" + Environment.NewLine +
"line four" + Environment.NewLine +
"line five";
List<string> lines = StringHelpers.ConvertBlockToLines(testBlock);
lines.ForEach(l => Console.WriteLine(l));
Console.ReadLine();
}
}
public static class StringHelpers
{
public static List<string> ConvertBlockToLines(this string block)
{
string fixedBlock = block.Replace(Environment.NewLine, "§");
List<string> lines = fixedBlock.Split('§').ToList<string>();
lines.ForEach(s => s = s.Trim());
return lines;
}
}
}
List<string> newStr = str.Split(new[] { Environment.NewLine }, StringSplitOptions.None).ToList();
Это приведет к тому, что последовательные строки новой строки будут пустыми (см. StringSplitOptions)
Нет необходимости конвертировать в свой специальный знак:
List<string> strings = str.Split(new string[] {Environment.NewLine}, StringSplitOptions.None).ToList();
strings.ForEach(s => s = s.Trim());
Вы пытались разделить на возврат новой строки/каретки и с помощью расширения IEnumerable ToList?
testBlock.Split( new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries )
.ToList()
Если вы хотите сохранить пустые строки, но могут иметь как возврат строки, так и возврат каретки.
textBlock.Replace( "\r\n", "\n" ).Replace( "\r", "\n" ).Split( '\n' ).ToList();
Хм. Вы знаете, что string
теперь имеет .Split(), который принимает массив string[]
, правильно?
Итак...
string[] lines = data.Split(
new string[1]{ Environment.NewLine },
StringSplitOptions.None
);
ou может использовать RegEx.Split для разделения напрямую с помощью Enviroment.NewLine.
public static List<string> ConvertBlockToLines(this string block)
{
return Regex.Split(block, Environment.NewLine).ToList();
}
LINQ!
var linesEnum = testBlock.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).AsEnumerable();
List<string> lines = linesEnum.ToList();