Пожалуйста, просмотрите этот вопрос для уточнения:
Чтобы разделить строку, вам нужно использовать перегрузку, которая принимает массив строк:
string[] lines = theText.Split(
new[] { Environment.NewLine },
StringSplitOptions.None
);
Изменить:
Если вы хотите обрабатывать разные типы разрывов строк в тексте, вы можете использовать возможность сопоставления более чем одной строки. Это будет правильно разделить на любой тип разрыва строки и сохранить пустые строки и интервалы в тексте:
string[] lines = theText.Split(
new[] { "\r\n", "\r", "\n" },
StringSplitOptions.None
);
Я просто подумал, что добавлю свои два бита, потому что другие решения по этому вопросу не попадают в классификацию кода для повторного использования и не удобны.
Следующий блок кода расширяет объект string
, так что он доступен как естественный метод при работе со строками.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Collections.ObjectModel;
namespace System
{
public static class StringExtensions
{
public static string[] Split(this string s, string delimiter, StringSplitOptions options = StringSplitOptions.None)
{
return s.Split(new string[] { delimiter }, options);
}
}
}
Теперь вы можете использовать функцию .Split()
из любой строки следующим образом:
string[] result;
// Pass a string, and the delimiter
result = string.Split("My simple string", " ");
// Split an existing string by delimiter only
string foo = "my - string - i - want - split";
result = foo.Split("-");
// You can even pass the split options parameter. When omitted it is
// set to StringSplitOptions.None
result = foo.Split("-", StringSplitOptions.RemoveEmptyEntries);
Чтобы разделить символ новой строки, просто передайте "\n"
или "\r\n"
в качестве параметра разделителя. .
Комментарий: Было бы неплохо, если бы Microsoft реализовала эту перегрузку.
Ну, на самом деле разделение должно выполняться:
//Constructing string...
StringBuilder sb = new StringBuilder();
sb.AppendLine("first line");
sb.AppendLine("second line");
sb.AppendLine("third line");
string s = sb.ToString();
Console.WriteLine(s);
//Splitting multiline string into separate lines
string[] splitted = s.Split(new string[] {System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);
// Output (separate lines)
for( int i = 0; i < splitted.Count(); i++ )
{
Console.WriteLine("{0}: {1}", i, splitted[i]);
}
Вы сможете довольно легко разделить свою строку, например:
aString.Split(Environment.NewLine.ToCharArray());
string[] lines = text.Split(
Environment.NewLine.ToCharArray(),
StringSplitOptions.RemoveEmptyStrings);
Параметр RemoveEmptyStrings гарантирует, что у вас нет пустых записей на \ n после \ r
(Отредактируйте, чтобы отразить комментарии :) Обратите внимание, что он также отбрасывает подлинные пустые строки в тексте. Обычно это то, что я хочу, но может не быть вашим требованием.
Я не знал о среде. Новая строка, но я думаю, это очень хорошее решение.
Моя попытка была бы такой:
string str = "Test Me\r\nTest Me\nTest Me";
var splitted = str.Split('\n').Select(s => s.Trim()).ToArray();
Дополнительный .Trim удаляет все \ r или \ n, которые могут все еще присутствовать (например, когда в окнах, но разбивая строку с os x символы новой строки). Вероятно, это не самый быстрый метод.
EDIT:
Как правильно указано в комментариях, при этом также удаляются любые пробелы в начале строки или перед новым переводом строки. Если вам нужно сохранить этот пробел, используйте один из других вариантов.