如果句子有一定数量的字符,则拆分句子
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 - 用于将文本拆分为句子的正则表达式(句子标记)[重复]