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

时间:2014-04-02 10:07:08

标签: c#

我需要将字符串中每个单词的第一个字母大写,并且如果单词的长度为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

感谢。

4 个答案:

答案 0 :(得分: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"));

你也可以在选择中标题,或者列出标题中的单词。

答案 1 :(得分:0)

这是逻辑(因为我不能很快地编写c#并且需要将其删除)

将字符串拆分为单词。

计算单词长度(Dr david bowie MD为4)

遍历每个单词,直到你到达数组中的最后一个单词 - &gt;

如果数组长度> 2然后是最后一个字 - 所有其他大写字母 - 只是正常资本化。

答案 2 :(得分:0)

这样简单可以解决你的问题吗?

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.

答案 3 :(得分:0)

“计算机是一台愚蠢的机器,能够做出令人难以置信的智能事物”,(Bill Bryson)

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

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

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

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

祝你好运