Самый простой способ разбить строку на новые строки в .NET?

Пожалуйста, просмотрите этот вопрос для уточнения:

https://serverfault.com/questions/10477/differences-between-classes12-jar-ojdbc14-jar-ojdbc5-jar-and -ojdbc6-банка

723
задан Peter Mortensen 31 May 2015 в 16:51
поделиться

6 ответов

Чтобы разделить строку, вам нужно использовать перегрузку, которая принимает массив строк:

string[] lines = theText.Split(
    new[] { Environment.NewLine },
    StringSplitOptions.None
);

Изменить:
Если вы хотите обрабатывать разные типы разрывов строк в тексте, вы можете использовать возможность сопоставления более чем одной строки. Это будет правильно разделить на любой тип разрыва строки и сохранить пустые строки и интервалы в тексте:

string[] lines = theText.Split(
    new[] { "\r\n", "\r", "\n" },
    StringSplitOptions.None
);
1324
ответ дан 22 November 2019 в 21:26
поделиться

Я просто подумал, что добавлю свои два бита, потому что другие решения по этому вопросу не попадают в классификацию кода для повторного использования и не удобны.

Следующий блок кода расширяет объект 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 реализовала эту перегрузку.

6
ответ дан Peter Mortensen 31 May 2015 в 16:51
поделиться

Ну, на самом деле разделение должно выполняться:

//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]);
}
2
ответ дан 22 November 2019 в 21:26
поделиться

Вы сможете довольно легко разделить свою строку, например:

aString.Split(Environment.NewLine.ToCharArray());
43
ответ дан 22 November 2019 в 21:26
поделиться
string[] lines = text.Split(
  Environment.NewLine.ToCharArray(), 
  StringSplitOptions.RemoveEmptyStrings);

Параметр RemoveEmptyStrings гарантирует, что у вас нет пустых записей на \ n после \ r

(Отредактируйте, чтобы отразить комментарии :) Обратите внимание, что он также отбрасывает подлинные пустые строки в тексте. Обычно это то, что я хочу, но может не быть вашим требованием.

1
ответ дан 22 November 2019 в 21:26
поделиться

Я не знал о среде. Новая строка, но я думаю, это очень хорошее решение.

Моя попытка была бы такой:

        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:

Как правильно указано в комментариях, при этом также удаляются любые пробелы в начале строки или перед новым переводом строки. Если вам нужно сохранить этот пробел, используйте один из других вариантов.

0
ответ дан 22 November 2019 в 21:26
поделиться