4

いくつかの段落で終わった複数行の文字列を取り、それをいくつかの個々のテキストに分割しようとしていました。

行をスキップするたびに、そこに \n\r のシーケンスがあることに気付きました。その後、改行はそれぞれ \n で始まり \r で終わると思いました。そのため、次のコードを書きました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication15
{
   class Program
   {
    struct ParagraphInfo
    {
        public ParagraphInfo(string text)
        {
            int i;
            Text = text;
            i = text.IndexOf('.');
            FirstSentence = text.Substring(0, i);
        }

        public string Text, FirstSentence;
    }

    static void Main(string[] args)
    {
        int tmp = 0;
        int tmp1 = 0;
        string MultiParagraphString = @"AA.aa.

BB.bb.

CC.cc.

DD.dd.

EE.ee.";

        List<ParagraphInfo> Paragraphs = new List<ParagraphInfo>();

        Regex NewParagraphFinder = new Regex(@"[\n][\r]");
        MatchCollection NewParagraphMatches = NewParagraphFinder.Matches(MultiParagraphString);


        for (int i = 0; i < NewParagraphMatches.Count; i++)
        {
            if (i == 0)
            {
                Paragraphs.Add(new ParagraphInfo((MultiParagraphString.Substring(0, NewParagraphMatches[0].Index))));
            }
            else if (i == (NewParagraphMatches.Count - 1))
            {
                tmp = NewParagraphMatches[i].Index + 3;
                tmp1 = MultiParagraphString.Length - NewParagraphMatches[i].Index - 3;
                Paragraphs.Add(new ParagraphInfo(MultiParagraphString.Substring(tmp, tmp1)));
            }
            else
            {
                tmp = NewParagraphMatches[i].Index + 3;
                tmp1 = NewParagraphMatches[i + 1].Index - NewParagraphMatches[i].Index+3;
                Paragraphs.Add(new ParagraphInfo(MultiParagraphString.Substring(tmp, tmp1)));
            }
        }

        Console.WriteLine(MultiParagraphString);
        foreach (ParagraphInfo Paragraph in Paragraphs)
        {
            Console.WriteLine(Paragraph.Text);

        }


    }
}
}

段落の各メンバーをテキスト全体と一緒に次々と印刷すると、かなり奇妙なものが現れました。段落リストの出力は次のとおりです。

AA.aa.


CC.cc。

DD。


DD.dd.

ええ。


ええええ。


なぜこれが起こり続けるのか理解できません。さらに、出力が毎回異なるのはなぜなのかわかりません。

混乱している場合は申し訳ありませんが、ここで本当に助けが必要です。誰かがそれを行うためのより良いアイデアを持っている場合は、自由に共有してください.

4

3 に答える 3

3

次のことを試してみてください。

MultiParagraphString.Split(new [] {Environment.NewLine}, 
           StringSplitOptions.RemoveEmptyEntries);

それは を返しますIEnumerable<String>。それらを構造に変換したい場合は、次を使用してくださいSelect

MultiParagraphString.Split(new [] {Environment.NewLine}, 
           StringSplitOptions.RemoveEmptyEntries)
          .Select(s => new ParagraphInfo(s)).ToList();
于 2013-01-28T15:13:18.260 に答える
0

新しい行はそれぞれ \n で始まり \r で終わると思いました

No. \r\nは、Windows (およびその他の非 Unix) システムで改行を示すために使用される 2 文字のシーケンスです。段落の「開始」と「終了」を示すものではありません。

段落に分割するには、次を使用できますstring.Split()

string[] paragraphs = MultiParagraphString.Split(new string[]{"\r\n"},
                           StringSplitOptions.RemoveEmptyEntries);
于 2013-01-28T15:12:09.147 に答える
0
 string text = richTextBox1.Text;

これを使用して段落を無視できます。

text = text.Replace((char)10, ' ');

これを使用してパラグラフを検出できます。

string[] words = s.split('');
foreach (string word in words)
{
if (word.Contains((char)10))
{
MessageBox.Show("A paragraph is here (with brillant English accent)");
}

注: このコードは、段落がテキストのエンター キーで区切られている場合にのみ機能します。

于 2016-06-24T19:22:33.900 に答える