使用c#在字符串中大写单词

Nir*_*Nir 20 c# string capitalization

我需要一个字符串,并在其中大写单词.某些单词("in","at"等)不会大写,如果遇到则会更改为小写.第一个词应该总是大写.像"McFly"这样的姓氏不属于当前范围,因此同样的规则适用于他们 - 只有首字母大写.

例如:"CNN的老鼠和男人"应该改为"CNN的老鼠和男人".(因此ToTitleString在这里不起作用)

我想知道最好的方法是什么.我想到的是用空格分割字符串,然后遍历每个单词,必要时更改它,并将其连接到前一个单词,依此类推.看起来很天真,我想知道是否有更好的方法,使用.Net 3.5.

jon*_*nii 16

根据您计划进行大写的频率,我会采用天真的方法.你可以用正则表达式来做,但事实上你不希望某些单词大写,这使得它有点棘手.

编辑:

您可以使用正则表达式进行两次传递

var result = Regex.Replace("of mice and men isn't By CNN", @"\b(\w)", m => m.Value.ToUpper());
result = Regex.Replace(result, @"(\s(of|in|by|and)|\'[st])\b", m => m.Value.ToLower(), RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)

这输出Of Mice and Men Isn't by CNN.

第一个表达式将单词边界上的每个字母大写,第二个表达式下载与空白包围的列表匹配的任何单词.

这种方法的缺点是你正在使用正则表达式(现在你有两个问题),你需要保持排除的单词列表是最新的.我的正则表达式不够好,无法在一个表达式中完成,但它可能是可能的.


dhi*_*esh 16

使用

Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase("of mice and men By CNN");
Run Code Online (Sandbox Code Playgroud)

要转换为正确的大小写,然后你可以像你提到的那样遍历关键字.


Vas*_*nko 7

以下是如何大写名称的答案

CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;

Console.WriteLine(textInfo.ToTitleCase(title));
Console.WriteLine(textInfo.ToLower(title));
Console.WriteLine(textInfo.ToUpper(title));
Run Code Online (Sandbox Code Playgroud)