C # как разделить по абзацам?

поэтому я знаю, что абзац - это char 10 + char 13, я делаю:

streamreader sr = new streamreader();
string s = sr.ReadToEnd();
string s1 = s.Replace((char)10, "*");
string s2 = s1.Replace((char)13, "*");

Теперь он изменил абзацы на два **, но как мне разделить на 2 символа? У кого-нибудь есть альтернативы разделению абзацев?

  1. способ простого разделения абзацев ИЛИ
  2. способ разделения на два символа

person user1243565    schedule 12.03.2012    source источник
comment
возможный дубликат string.split - многосимвольным разделителем   -  person Chris Haas    schedule 12.03.2012


Ответы (5)


string doc = "line1\r\nline2\r\nline3";
var docLines = doc.Split(new string[] { "\r\n" }, System.StringSplitOptions.None);

Аллитеративно вы могли бы использовать Environment.NewLine ... что бы все оставалось стандартным.

var docLines = doc.Split(new string[] { Environment.NewLine }, System.StringSplitOptions.None);
person CrazyDart    schedule 12.03.2012

Предполагая, что вы имеете в виду ASCII cr + lf (13 + 10), просто используйте StreamReader.ReadLine ().

person tomfanning    schedule 12.03.2012

Вы пробовали Regex? Windows использует \r (13), за которым следует \n (10) в качестве разделителя строк, поэтому вы получите строки. Но если вы хотите, чтобы блоки текста были разделены хотя бы одной пустой строкой, вы можете попробовать следующее:

 string inputString = sr.ReadToEnd();

 string[] paragraphs = Regex.Split(inputString , "(\r\n){2,}");
person Mithrandir    schedule 12.03.2012

См. string.Split (string [], StringSplitOption):

var result = s2.Split(new []{"**"}, StringSplitOption.RemoveEmptyEntries)

Вы также можете сделать это с помощью Environment.NewLine, без преобразования в **:

var result = s.Split(new []{Enviornment.NewLine}, StringSplitOption.RemoveEmptyEntries)
person Saeed Amiri    schedule 12.03.2012
comment
Проблема с ** заключается в том, что он копирует его еще в две строки, чтобы это произошло ... если бы этот файл был большим, он бы съел память как сумасшедший, поэтому я бы полностью избегал подхода **. - person CrazyDart; 12.03.2012
comment
@CrazyDart, я написал оба варианта до вашего комментария и вашего ответа, также я просто редактирую его, чтобы добавить ссылку на документ msdn. (Снова перед вашим комментарием) - person Saeed Amiri; 12.03.2012
comment
Я не спорю с этим, все, что я говорю, это то, что OP не должен использовать метод ** из-за тяжелой работы. Это не оптимально. Я предполагаю, что единственная причина, по которой это было сделано, заключалась в том, чтобы раскрыть \ r \ n. В конце концов, у Митрандира может быть лучший ответ ... механизм регулярных выражений, вероятно, будет работать быстрее. - person CrazyDart; 12.03.2012
comment
@CrazyDart, я с тобой согласен. но OP хорошо знает это шаг за шагом. - person Saeed Amiri; 12.03.2012

Используйте регулярное выражение, если ваши критерии разделения просты.

person Ani    schedule 12.03.2012