Я знаю, что немного опоздал, но так же, как и Вам, мне нужно было использовать каждый первый символ в каждом предложении.
Я просто упал сюда (и много других страниц, пока я занимался исследованиями) и не нашел ничего, что могло бы мне помочь. Итак, я сжег несколько нейронов и сам создал алгоритм.
Вот мой метод расширения, чтобы сделать предложения заглавными:
public static string CapitalizeSentences(this string Input)
{
if (String.IsNullOrEmpty(Input))
return Input;
if (Input.Length == 1)
return Input.ToUpper();
Input = Regex.Replace(Input, @"\s+", " ");
Input = Input.Trim().ToLower();
Input = Char.ToUpper(Input[0]) + Input.Substring(1);
var objDelimiters = new string[] { ". ", "! ", "? " };
foreach (var objDelimiter in objDelimiters)
{
var varDelimiterLength = objDelimiter.Length;
var varIndexStart = Input.IndexOf(objDelimiter, 0);
while (varIndexStart > -1)
{
Input = Input.Substring(0, varIndexStart + varDelimiterLength) + (Input[varIndexStart + varDelimiterLength]).ToString().ToUpper() + Input.Substring((varIndexStart + varDelimiterLength) + 1);
varIndexStart = Input.IndexOf(objDelimiter, varIndexStart + 1);
}
}
return Input;
}
Подробности об алгоритме:
Этот простой алгоритм начинает удалять все двойные пробелы. Затем он использует первый символ строки. тогда ищите каждый разделитель. Когда найдете один, используйте следующий символ с большой буквы.
Я упростила добавление / удаление или редактирование разделителей, поэтому вы можете многое изменить, как работает код, с небольшими изменениями в нем.
Он не проверяет, выходят ли подстроки из длины строки, потому что разделители заканчиваются пробелами, а алгоритм начинается с «Trim ()», поэтому за каждым разделителем, если он найден в строке, будет следовать другой символ.
Важно:
Вы не указали, что именно вам нужно. Я имею в виду, что это корректор грамматики, это просто предварительный текст и т. Д. Итак, важно учитывать, что мой алгоритм просто идеально подходит для моих нужд, который может отличаться от вашего.
* Этот алгоритм был создан для форматирования «описания продукта», которое не нормализовано (почти всегда полностью прописными буквами) в хорошем формате для пользователя (чтобы быть более конкретным, мне нужно показать красивое и «меньшее») текст для пользователя. Таким образом, все символы в верхнем регистре просто противоположны тому, что я хочу). Таким образом, он не был создан, чтобы быть грамматически совершенным.
* Кроме того, могут быть некоторые исключения, когда символ не будет в верхнем регистре из-за плохого форматирования.
* Я предпочитаю включать пробелы в разделитель, поэтому "http://www.stackoverflow.com" не станет" http://www.Stackoverflow.Com". С другой стороны, предложения типа "коробка синего цвета. Она на полу" будет становится "Коробка синего цвета. Она на полу", а не"Коробка синего цвета. Она на полу"
* В случаях аббревиатур оно будет написано заглавными буквами, но опять же, это не проблема, потому что мне нужно просто показать описание продукта (где грамматика не очень критична). А в таких сокращениях, как «Мистер» или «Доктор», самый первый символ - это имя, поэтому его нужно писать с большой буквы.
Если вам или кому-то еще понадобится более точный алгоритм, я буду рад его улучшить.
Надеюсь, я смогу кому-нибудь помочь!