【问题标题】:How do I capitalized specific two letter word in a string in addition to the first letter of any word?除了任何单词的第一个字母外,如何将字符串中的特定两个字母单词大写?
【发布时间】:2014-04-02 10:07:08
【问题描述】:

我需要将字符串中每个单词的第一个字母大写,如果单词的长度为 2,则还要将字符串中的 specific 单词大写。我可以在<list>Array 中指定这两个词。

上一个问题和解决方案provided here 将每个包含两个字母的单词大写。但是,如果某人的名字只有两个字母,这就会成为一个问题。示例:Ja RuleRobert 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

谢谢。

【问题讨论】:

  • 我们可以假设每个人都有两个名字吗?
  • 是的,但我指的是两个字母的名字。所以Robert Jah 不受影响,但Robert JA 受到影响。

标签: c#


【解决方案1】:

指定要大写的 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"));

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

【讨论】:

  • Assert.That 的声明或命名空间是什么?好像能找到。谢谢
  • 断言仅用于测试,它是测试的端口。您可以安全地删除该行。
【解决方案2】:

这里是逻辑(因为我不能很快地编写 c#,需要快速关闭)

将字符串拆分为单词。

计算单词的长度(大卫鲍伊博士 MD 为 4)

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

如果数组长度 > 2 则最后一个单词 - 其他全部大写 - 正常大写。

【讨论】:

    【解决方案3】:

    这样简单的事情能解决你的问题吗?

    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.

    【讨论】:

      【解决方案4】:

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

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

      • 是一组已定义标题的一部分
      • 不属于已定义的名称集
      • 在字符串的末尾(不适用于李连杰)
      • 至少还剩下两个裂口(不适用于 Jet Mo Li 博士)
      • 它包含一个元音(不适用于 Jet Li,如果“Li”是标题)

      如果你能够区分,那么你应该给你的程序同样的能力。

      请注意,如果存在您只是不知道它是名称还是头衔的情况,则计算机无法胜过您。 (实际上,有可能让你的程序扫描一个巨大的数据源(即整个互联网)并让它感知所有可能的标题和名称,然后让它决定“jet li”中的“li”是标题还是一个名字。)

      最好的问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 2011-08-09
        • 2023-01-26
        • 2011-07-29
        • 1970-01-01
        相关资源
        最近更新 更多