在我的文章标题中,我使用CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
,但我认为在双引号后面不起作用。至少对于土耳其语来说。
例如,文章标题如下:
KİRAPARASININÖDENMEMESİNEDENİYLEYAPILAN“İLAMSIZTAHLİYE” TAKİPLERİNDE“TAKİPTALEBİ”NİNİÇERİĞİ。
使用了像这样的方法之后:
private static string TitleCase(this string str)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToLower());
}
var art_title = textbox1.Text.TitleCase();
返回
KiraParasınınÖdenmemesiNedeniyleYapılan“İlamsızTahliye” Takiplerinde“ Takip Talebi” Ninİçeriği。
问题在这里。因为它必须是这样的:
...“ Takip Talebi” nin ...
但它是这样的:
...“ Takip Talebi” Nin ...
此外,在MS Word中,当我单击“启动Word初始费用”时,它的变化方式就是这样
...“ Takip Talebi” Nin ...
但这是绝对错误的。我该如何解决这个问题?
编辑:首先,我从空白处删去句子,得到单词。如果单词包含双引号,它将得到一个小写字符串,直到第二个双引号之后的第一个空格为止。这是想法:
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小时后,我找到了解决问题的方法。我相信这绝对不是科学的。请不要为此谴责我。如果整个问题都是双引号,那么在将其发送到ToTitleCase
之前,我将其替换为我认为是唯一的数字或土耳其语中未使用的字母,例如alpha,beta,omega等。在这种情况下,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();
结果:
KiraParasınınÖdenmemesiNedeniyleYapılan“İlamsızTahliye” Takiplerinde“ Takip Talebi” ninİçeriği
答案 0 :(得分:1)
实际上,Microsoft文档ToTitleCase声明ToTitleCase(至少当前)在语言上不正确。实际上,正确地做到这一点真的很难(请参阅出色的Michael Kaplan的这些博客文章:Sometimes, uppercasing sucks和"Michael, why does ToTitleCase suck so much?")。
我不知道任何提供语言正确版本的服务或库。
因此-除非您想花很多精力-否则您可能不得不忍受这种不准确性。
答案 1 :(得分:0)
您可以使用RegEx查找撇号或引号字符,并替换其后的字符。
单引号
Regex.Replace(str, "’(?:.)", m => m.Value.ToLower());
或
Regex.Replace(str, "'(?:.)", m => m.Value.ToLower());