Как получить строку без строчных букв после кавычек в условии titlecase - PullRequest
0 голосов
/ 04 ноября 2018

В заголовках статей я использую CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());, но я думаю, что после двойных кавычек это не работает. По крайней мере, для турецкого.

Например, заголовок статьи:

KİRA PARASININ ÖDENMEMESİ NEDENİYLE YAPILAN "ИЛАМСИЗ ТАХЛИЕ" TAKİPLERİNDE "TAKİP TALEBİ" NİN İÇERİĞİ.

После использования метода, подобного этому:

private static string TitleCase(this string str)
{
   return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
}

var art_title = textbox1.Text.TitleCase(); Возвращает

Kira Parasının Ödenmemesi Nedeniyle Yapılan "İlamsız Tahliye" Takiplerinde "Takip Talebi" Nin İçeriği.

Проблема здесь. Потому что это должно быть так:

... "Такип Талеби" нин ...

но это так:

... "Такип Талеби" Нин ...

Более того, в MS Word, когда я нажимаю «Начать первоначальный расход Word», он трансформируется так

... "Такип Талеби" Нин ...

Но это абсолютно неправильно. Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ: Сначала я вырезал предложение из пробелов и получил слова. Если слово содержит двойные кавычки, оно получит строчную строку до первого пробела после второй двойной кавычки. Вот идея:

private static string _TitleCase(this string str)
{
    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
}
public static string TitleCase(this string str)
{
    var words = str.Split(' ');
    string sentence = null;
    var i = 1;
    foreach (var word in words)
    {
        var space = i < words.Length ? " " : null;
        if (word.Contains("\""))
        {
            // After every second quotes, it would get a lowercase string until the first space after the second double quote... But how?
        }
        else
            sentence += word._TitleCase() + space;
        i++;
    }
    return sentence?.Trim();
}

Редактировать - 2 Через 3 часа: Через 9 часов я нашел способ решить проблему. Я считаю, что это абсолютно не научно. Пожалуйста, не осуждайте меня за это. Если вся проблема заключается в двойных кавычках, я заменяю его числом, которое, на мой взгляд, является уникальным или неиспользованным по-турецки, например, альфа, бета, омега и т. Д., Прежде чем отправить его в ToTitleCase. В этом случае ToTitleCase осуществляет преобразование заголовка без каких-либо проблем. Затем я заменяю число или неиспользованную букву двойными кавычками во время возврата. Итак, цель реализована. Пожалуйста, поделитесь здесь, если у вас есть программное или научное решение.

Вот мое непрограммное решение:

public static string TitleCase(this string str)
{
    str = str.Replace("\"", "9900099");
    str = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
    return str.Replace("9900099", "\"").Trim();
}

var art_title = textbox1.Text.TitleCase();

И результат:

Kira Parasının Ödenmemesi Nedeniyle Yapılan "İlamsız Tahliye" Takiplerinde "Takip Talebi" nin İçeriği

1 Ответ

0 голосов
/ 04 ноября 2018

Действительно, в документации Microsoft ToTitleCase говорится, что ToTitleCase (по крайней мере в настоящее время) не является лингвистически правильным. На самом деле, ДЕЙСТВИТЕЛЬНО трудно сделать это правильно (см. Эти записи в блоге великого Майкла Каплана: Иногда верхний регистр отстой и "Майкл, почему ToTitleCase так много сосет?" ).

Мне не известны какие-либо службы или библиотеки, предоставляющие лингвистически правильную версию.

Так что - если вы не хотите тратить много усилий - вам, вероятно, придется жить с этой неточностью.

...