【问题标题】:C# how to separate by paragraph?C#如何按段落分隔?
【发布时间】:2012-03-12 16:01:50
【问题描述】:

所以我知道一个段落是 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. 两个字符分割的方式

【问题讨论】:

标签: c# streamreader text-files


【解决方案1】:
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);

【讨论】:

    【解决方案2】:

    假设您的意思是 ASCII cr+lf (13+10),只需使用 StreamReader.ReadLine()

    【讨论】:

      【解决方案3】:

      你试过Regex吗? Windows 使用\r(13) 后跟\n(10) 作为行分隔符,所以你会得到行。但是如果你想用至少一个空行分隔文本块,你可以试试这个:

       string inputString = sr.ReadToEnd();
      
       string[] paragraphs = Regex.Split(inputString , "(\r\n){2,}");
      

      【讨论】:

        【解决方案4】:

        string.Split(string[], StringSplitOption):

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

        您也可以使用Environment.NewLine 来实现,而无需将其转换为**:

        var result = s.Split(new []{Enviornment.NewLine}, StringSplitOption.RemoveEmptyEntries)
        

        【讨论】:

        • ** 的问题是他将它复制到另外 2 个字符串中以实现这一点......如果该文件很大,它会像疯了一样吃掉内存,因此我会避免 **完全接近。
        • @CrazyDart,我在您的评论和您的回答之前都写了两种方式,另外我只是编辑它以添加指向 msdn 文档的链接。(再次在您的评论之前)
        • 我不争论,我只是说 OP 不应该使用 ** 方法,因为繁重。它不是最优的。我猜这样做的唯一原因是揭示\r\n。最后,Mithrandir 可能有更好的答案……正则表达式引擎可能会运行得更快。
        • @CrazyDart,我同意你的看法。但有利于OP一步一步了解。
        【解决方案5】:

        如果您的拆分条件很简单,请使用正则表达式。

        【讨论】:

          猜你喜欢
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-17
          • 2013-04-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多