大家好我真的需要你的帮助。我试图采用一个多行字符串,该字符串由几段结尾,并将其分成几个单独的文本。
我意识到每当我跳过一条线时,就会有一系列的\ 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。
EE
EE.ee。
我无法理解为什么会这种情况继续发生,而且我无法弄清楚为什么输出每次都如此不同。
对不起,如果这是一团糟,但我真的需要一些帮助。 顺便说一句,如果有人有更好的想法,可以随意分享..
谢谢
答案 0 :(得分:3)
您可以尝试以下方法:
MultiParagraphString.Split(new [] {Environment.NewLine},
StringSplitOptions.RemoveEmptyEntries);
这将返回IEnumerable<String>
。如果您想将它们转换为结构,请使用Select
:
MultiParagraphString.Split(new [] {Environment.NewLine},
StringSplitOptions.RemoveEmptyEntries)
.Select(s => new ParagraphInfo(s)).ToList();
答案 1 :(得分:0)
我认为每个新行都以\ n开头,以\ r
结束
没有。 \r\n
是用于表示Windows(和其他非Unix)系统中的新行的双字符序列。它不表示段落的“开始”和“结束”。
要分为段落,您可以使用string.Split()
:
string[] paragraphs = MultiParagraphString.Split(new string[]{"\r\n"},
StringSplitOptions.RemoveEmptyEntries);
答案 2 :(得分:0)
string text = richTextBox1.Text;
您可以使用以下内容忽略段落:
text = text.Replace((char)10, ' ');
您可以使用以下方法检测paragraps:
string[] words = s.split('');
foreach (string word in words)
{
if (word.Contains((char)10))
{
MessageBox.Show("A paragraph is here (with brillant English accent)");
}
注意:此代码仅在段落通过文本上的输入键分隔时才有效。