Как то так.Очевидно, замените «someText» вашими данными и установите shardLength равным 1000 для вашего примера.Это решение выдает ошибку, если есть предложение больше, чем размер блока.
В настоящее время он обрабатывает переводы строк, фактически игнорируя их - он разделяется только на "."
Это означает, что предложения, оканчивающиеся на ". \ N", будут разделены после ".", А "\ n" будет в начале следующего предложения.
Преимущество здесь в том, что если вы передадите это в свой API, вы сможете объединить результаты и сохранить новые строки в соответствующих местах (при условии, что API обрабатывает новые строки).
using System.Text.RegularExpressions;
public static void BlockSplitter()
{
String someText = @"This is some text.
The quick brown fox jumps over the lazy dog. Testing 1 2 3.
Sentence with no fullstop";
String[] sentences;
string delimiters = @"(?<=\.)";
sentences = Regex.Split(someText,delimiters);
String shard = String.Empty;
int shardLength = 45;
foreach (String sentence in sentences)
{
if (sentence.Length > shardLength)
{
//Raise an exception as the sentence
}
if ((shard.Length + sentence.Length) <= shardLength)
{
shard += sentence;
}
else
{
Console.WriteLine(shard);
shard = sentence;
}
}
Console.WriteLine(shard);
}