除了任何单词的第一个字母之外,我如何在字符串中大写特定的两个字母单词
本文关键字:两个 单词 字符串 第一个 任何单 | 更新日期: 2023-09-27 17:56:13
我需要将字符串中每个单词的第一个字母大写,如果单词的长度为2,还需要将字符串中的specific
个单词大写。我可以在<list>
或Array
中指定这两个词。
此处提供的先前问题和解决方案将包含两个字母的每个单词大写。但是,如果某人的名字只有两个字母,这就会成为一个问题。示例:Ja Rule
或Robert Mo
。我需要大写以下内容:NW SW MD
它们是否出现在字符串中。
下面的代码将每个单词的首字母和包含两个字符的单词的两个字母大写。同样,对于两个字母名称来说,这成为一个问题:
var input = "dr. david BOWIE md";
TextInfo tCase = new CultureInfo("en-US", false).TextInfo;
var result = tCase.ToTitleCase(input.ToLower());
result = string.Join(" ", result.Split(' ')
.Select(i => i.Length == 2 ? i.ToUpperInvariant() : i));
输出:
Dr. David Bowie MD
问题:
Jason De
,也变得Jason DE
谢谢。
指定要大写的 2 个字母单词(如果列表较短,则指定 2 个字母单词,则不大写),并检查该单词是否包含在列表中,如果是,则大写整个单词,否则将其保留为标题大小写
var input = "dr. david BOWIE md";
TextInfo tCase = new CultureInfo("en-US", false).TextInfo;
var result = tCase.ToTitleCase(input.ToLower());
var wordsToCapitalize = new []{"nw", "dw", "md"};
result = string.Join(" ", result.Split(' ')
.Select(i => (i.Length == 2 && wordsToCapitalize.Contains(i.ToLower())) ? i.ToUpperInvariant() : i));
Assert.That(result, Is.EqualTo("Dr. David Bowie MD"));
您也可以在选择中将标题大小写,或者将列表标题中的单词大小写。
这是逻辑(因为我不能很快编写 c#,需要快速浏览)
将字符串拆分为单词。
计算单词长度(大卫鲍伊医学博士为 4 个)
遍历每个单词,直到到达数组中的最后一个单词 ->
如果数组的长度> 2,则最后一个单词 - 其他所有大写字母 - 只需正常大写即可。
像这样简单的事情可以解决你的问题吗?
var list = new List<string>{" of ", " is ", " an ", " to "};
var x = "This is an example of stuff to replace.";
foreach(var word in list){
x = x.Replace(word, word.ToUpper());
// Alternative if you don`t want to put spaces in the list:
// x = x.Replace(" " + word + " ", " " + word.ToUpper() + " ");
}
其结果将是 :This IS AN example OF stuff TO replace.
计算机是一台愚蠢的机器,能够做令人难以置信的聪明事情",(比尔·布赖森)
您需要让计算机能够区分名称和学位。可以通过多种方法确定标题:
- 是一组已定义的标题的一部分
- 不是一组已定义名称的一部分
- 在字符串的末尾(对李连杰不起作用)
- 至少剩下两个分裂(对李连杰博士不起作用)
- 它包含一个元音(如果"李"是一个标题,则对李连杰不起作用)
如果你能够区分,那么你应该给你的程序同样的能力。
请注意,如果存在您不知道它是名称还是标题的情况,那么计算机将无法胜过您。(实际上,有可能让你的程序扫描一个巨大的数据源(即整个互联网),让它感知所有可能的标题和名称,然后让它决定"jet li"中的"li"是标题还是名称。
此致敬意