C# 除了任何单词的第一个字母外,如何将字符串中特定的两个字母的单词大写?

C# 除了任何单词的第一个字母外,如何将字符串中特定的两个字母的单词大写?,c#,C#,我需要将字符串中每个单词的第一个字母大写,如果单词的长度为2,还需要将字符串中的特定单词大写。我可以在或数组中指定这两个单词 前面的问题和解决方案将包含两个字母的每个单词大写。但如果一个人的名字只有两个字母,这就成了一个问题。示例:Ja规则或robertmo。如果它们出现在字符串中,我需要大写:NW-SW-MD 以下代码将每个单词的首字母大写,并将包含两个字符的单词的两个字母大写。同样,这对于两个字母的名称也是一个问题: var input = "dr. david BOWIE md"; Tex

我需要将字符串中每个单词的第一个字母大写,如果单词的长度为2,还需要将字符串中的特定单词大写。我可以在
数组中指定这两个单词

前面的问题和解决方案将包含两个字母的每个单词大写。但如果一个人的名字只有两个字母,这就成了一个问题。示例:
Ja规则
robertmo
。如果它们出现在字符串中,我需要大写:
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

谢谢。

这是逻辑(因为我不能很快写出c,需要赶紧离开)

将字符串拆分为单词

计算单词长度(david bowie博士4个)

循环遍历每个单词,直到到达数组中的最后一个单词->


如果数组长度大于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"));

您也可以在“选择”中选择标题大小写,或将列表标题中的单词大小写。

像这样简单的方法可以解决您的问题吗

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() + " ");
}
var list=新列表{“of”、“is”、“an”、“to”};
var x=“这是一个需要替换的东西的示例。”;
foreach(列表中的变量字){
x=x.Replace(word,word.ToUpper());
//如果您不想在列表中放置空格,请选择:
//x=x.Replace(“+word+”,“+word.ToUpper()+”);
}
结果将是:
这是一个需要替换的东西的例子。

“计算机是一台愚蠢的机器,能够做非常聪明的事情”(比尔·布莱森)

您需要让计算机能够区分名称和学位。 可以通过几种方法确定标题:

  • 是已定义标题集的一部分
  • 不是已定义名称集的一部分
  • 在绳子的末端(不适用于李连杰)
  • 至少还有两个裂口(李连杰博士不适用)
  • 它包含一个元音(不适用于李连杰,如果“李”是一个标题)
如果你能辨别,那么你应该给你的程序同样的能力

请注意,如果存在这样的情况,你只是不知道它是一个名字还是一个头衔,那么计算机就不能比你聪明。(实际上,可以让你的程序扫描一个巨大的数据源(即整个互联网),让它感知所有可能的标题和名称,然后让它决定“李连杰”中的“李”是标题还是名称。)


致以最诚挚的问候

我们能假设每个人都有两个名字吗?是的,但我指的是两个字母的名字。因此,
Robert Jah
不受影响,但
Robert JA
受到影响。声明或命名空间是什么:
Assert.That
?我似乎能找到它。感谢assert只用于测试,它是测试的端口。你可以安全地拆下那条线。