C # как разделить по абзацу? - PullRequest
3 голосов
/ 12 марта 2012

так что я знаю, что абзац - это символ 10 + символ 13, который я делаю:

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

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

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

Ответы [ 5 ]

4 голосов
/ 12 марта 2012
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);
3 голосов
/ 12 марта 2012

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

2 голосов
/ 12 марта 2012

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

 string inputString = sr.ReadToEnd();

 string[] paragraphs = Regex.Split(inputString , "(\r\n){2,}");
1 голос
/ 12 марта 2012

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

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

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

var result = s.Split(new []{Enviornment.NewLine}, StringSplitOption.RemoveEmptyEntries)
0 голосов
/ 12 марта 2012

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

...