首页 > 解决方案 > 如何在标题条件中的引号后获取非小写字符串

问题描述

在我的文章标题中,我使用CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());但我认为,它在双引号后不起作用。至少对于土耳其人来说。

例如,一篇文章的标题是这样的:

KİRA PARASININ ÖDENMEMESİ NEDENİYLE YAPILAN "İLAMSIZ TAHLİYE" 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。

问题就在这里。因为它必须是这样的:

...“Takip Talebi”nin ...

但它是这样的:

...“Takip Talebi”宁 ...

更重要的是,在MS Word中,当我点击“Start a Word Initial Expense”时,它会变成这样

...“Takip Talebi”宁 ...

但这是绝对错误的。我该如何解决这个问题?

编辑:首先我从空白中剪下句子并获得单词。如果一个单词包含双引号,它将得到一个小写字符串,直到第二个双引号之后的第一个空格。这是想法:

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();
}

编辑 - 3 小时后的 2:9 小时后,我找到了解决问题的方法。我认为这绝对不科学。请不要因此谴责我。如果整个问题是双引号,我将其替换为我认为唯一的数字或土耳其语中未使用的字母,例如 alpha、beta、omega 等,然后再将其发送到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

标签: c#title-case

解决方案


实际上,Microsoft 文档ToTitleCase声明 ToTitleCase(至少目前)在语言上不正确。事实上,正确地做到这一点真的很难(请参阅伟大的 Michael Kaplan 的这些博客文章:有时,大写很糟糕“Michael,为什么 ToTitleCase 这么糟糕?”)。

我不知道有任何服务或图书馆提供语言正确的版本。

所以——除非你想花很多精力——你可能不得不忍受这种不准确。


推荐阅读