Как я могу преобразовать строку с новыми строками в нее в отдельные строки? - PullRequest
1 голос
/ 23 августа 2010

Как преобразовать строку с \r\n в строки?

Например, возьмите эту строку:

string source = "hello \r\n this is a test \r\n tested";

и как я могу преобразовать это в:

string[] lines ;

//lines[0] = hello;
//lines[1] = this is a test;
//lines[2] = tested ;

Ответы [ 5 ]

3 голосов
/ 23 августа 2010

Использовать Метод String.Split (String [], StringSplitOptions) примерно так:

var lines = source.Split(new [] { "\r\n", "\n" }, StringSplitOptions.None);

Этот метод будет работать независимо от того, записан ли источник с переводом строки Windows \r\nили Unix \n.

Как уже упоминалось в других ответах, вы можете использовать StringSplitOptions.RemoveEmptyEntries вместо StringSplitOptions.None, который, как следует из названия, удаляет пустые строки (" " не может считаться пустым, только"" делает).

1 голос
/ 23 августа 2010

Помимо упомянутого string.Split, вы также можете использовать Regex.Split , но это часто более полезно для более сложных шаблонов разбиения.

var lines = Regex.Split( source, @"\r\n" );
0 голосов
/ 24 августа 2010

Для ясности я сделал еще один ответ.

Я сделал эти два метода расширения:

ReadLines позволит вам читать по одной строке за раз, не разбирая всю строку вмассив.ReadAllLines проанализирует всю строку в массив.

В вашем случае вы можете использовать его следующим образом:

var lines = source.ReadAllLines();

Я взял имена из File.ReadLines и File.ReadAllLinesпоэтому они должны соответствовать остальной части .Net Framework.

В качестве примечания к комментариям к моему другому ответу я проверил код StringReader.ReadLine, и он позаботился как о \r\n, так и о\n - но не старый Mac OS и т. Д. (Это не важно).

public static class StringExtensions
{
    public static IEnumerable<string> ReadLines(this string data)
    {
        using (var sr = new StringReader(data))
        {
            string line;

            while ((line = sr.ReadLine()) != null)
                yield return line;
        }
    }

    public static string[] ReadAllLines(this string data)
    {
        var res = new List<string>();

        using (var sr = new StringReader(data))
        {
            string line;

            while ((line = sr.ReadLine()) != null)
                res.Add(line);
        }

        return res.ToArray();
    }
}

(ReadAllLines можно было бы сделать с помощью ReadLines.ToArray, но я решил, что лишние несколько строккода был лучше, чем завернутый IEnumerable, который занимает некоторое время обработки)

0 голосов
/ 23 августа 2010
string text = "Hello \r\n this is a test \r\n tested";
string[] lines = text.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines) {
    System.Diagnostics.Debug.WriteLine(line);
}

Можно использовать перегрузки System.String.Split , чтобы использовать один символ, массив символов или массив строковых значений в качестве разделителей для разделения строки.StringSplitOptions указывает, следует ли сохранять пустые строки или удалять их.(Вы хотели бы сохранить их, например, если вы разбиваете многострочный текст, такой как абзац, но удалите их в примере списка имен)

0 голосов
/ 23 августа 2010

Попробуйте

string[] items = source.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...