把句子分成这样的小段.net

本文关键字:小段 net 句子 | 更新日期: 2023-09-27 18:17:16

我需要拆分这段文字

这真的很酷,我喜欢。

this
is
really
cool
,
and
i
like
it
.

你知道怎么做吗?用空格分隔

this
is
really
cool,
and
i
like
it.

我需要标点符号i作为数组的单独元素

谢谢

把句子分成这样的小段.net

不能使用String。

相反,您可以使用Regex.Split来执行此操作:

Regex r = new Regex(@"[ ]|(?=[,.])");
string[] items = r.Split(input);

在这个模式中,我们要么匹配空格(它被"消耗"),要么提前查找标点符号(并且不"消耗"它)。

如果您只关心输出而不太关心性能,为什么不这样做呢:

string[] splitSentence(string sentence) {
    return sentence
        .Replace(",", " , ")
        .Replace(".", " . ")
        .Split(' ', StringSplitOptions.RemoveEmptyEntries);
}

它会工作!:)当然,如果你确实关心性能,请看Scott的回答。

我可能会用老式的方法来处理这个问题,简单地遍历每个字符。比如:

    static private IList<string> SplitString(string str)
    {
        List<string> lines = new List<string>();
        StringBuilder line = new StringBuilder();
        for(int i = 0; i < str.Length; ++i)
        {
            if (char.IsWhiteSpace(str[i]))
            {
                // split silently at whitespace
                if (line.Length > 0)
                    lines.Add(line.ToString());
                line.Clear();
            }
            else if (IsPunctuationCharacter(str[i]))
            {
                // split for punctuation and include each punctuation character as its own line
                if (line.Length > 0)
                    lines.Add(line.ToString());
                lines.Add(new string(new char[] { str[i] }));
                line.Clear();
            }
            else
            {
                // all other characters get added to the current line
                line.Append(str[i]);
            }
        }
        if (line.Length > 0)
            lines.Add(line.ToString());
        return lines;
    }
    static private bool IsPunctuationCharacter(char c)
    {
        if (c == ',' || c == '.' || c == '?' || c == '!')
            return true;
        else
            return false;
    }