如果句子有一定数量的字符,则拆分句子

Posted

技术标签:

【中文标题】如果句子有一定数量的字符,则拆分句子【英文标题】:Split sentence if it has certain number of characters 【发布时间】:2021-10-20 14:38:57 【问题描述】:

我需要一个看起来像这样的函数

static IEnumerable<string> GetSplittedSentences(string str, int iterateCount)

    var words = new List<string>();

    for (int i = 0; i < str.Length; i += iterateCount)
        if (str.Length - i >= iterateCount) 
            words.Add(str.Substring(i, iterateCount));
        else 
            words.Add(str.Substring(i, str.Length - i));

    return words;

感谢Split string by character count and store in string array

我传入一个作为句子的字符串和一个Int,这是一个句子中允许的最大字符数。

但问题是:我不希望句子在单词中间被拆分。而是在最后一个可能的单词之前拆分并转到下一个句子。

我不知道该怎么做。有人知道怎么做吗?

提前谢谢你

【问题讨论】:

您可以通过在空间上拆分将整个内容拆分为单词,然后将它们重新组合在一起,直到达到极限。或者,您可以移动到第 n 个位置,然后返回到那里的空间分割,然后继续。 【参考方案1】:

让我们试试吧。 (按照上面 Juharr 评论中的第二个选项)

static IEnumerable<string> GetSplittedSentences(string str, int iterateCount)

    var words = new List<string>();
    int i = 0;
    while(i < str.Length)
    
        // Find the point where the split should occur
        int endSentence = i+iterateCount;
        if (endSentence <= str.Length)
        
            // Go back to find a space
            while(str[endSentence] != ' ')
                endSentence--;
         
            // Take the string before the space 
            words.Add(str.Substring(i, endSentence-i));

            // Position the start point to extract the next block
            i = endSentence+1;
        
        else
        
            words.Add(str.Substring(i, str.Length - i));
            i = str.Length; // Force the loop to exit
        
    
    return words;

如果有一个长度大于 iterateCount

的单词,这仍然会有问题

【讨论】:

这正是我想要的!谢谢你。我还欣赏的是,您没有使用 split 创建一堆影响内存的字符串。很好的答案! 另一种选择是使用LastIndexOf 来查找要拆分的空间。类似str.LastIndex(' ', endSentence)

以上是关于如果句子有一定数量的字符,则拆分句子的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 以句子为节点的有向图

Python - 用于将文本拆分为句子的正则表达式(句子标记)[重复]

LeetCode 2047. 句子中的有效单词数 / 1996. 游戏中弱角色的数量 / 1765. 地图中的最高点

英文单词数量统计

有没有办法在Java中的一定数量的字符之后拆分字符串?

418. 屏幕可显示句子的数量