繁体   English   中英

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

[英]How do I capitalized specific two letter word in a string in addition to the first letter of any word?

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

这里提供的先前的问题和解决方案每个包含两个字母的单词大写。 但是,如果某人的名字只有两个字母,这将成为一个问题。 例如: 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

谢谢。

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

您也可以在select内添加标题大小写,也可以在列表标题中添加单词大小写。

这是逻辑(因为我无法很快地编写C#,因此需要深入研究)

将字符串拆分为单词。

计算单词的长度(大卫·鲍伊博士MD为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.

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

您需要使计算机能够区分名称和程度。 确定标题的方法有几种:

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

如果您能够区分,则您应赋予程序相同的能力。

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

最好的祝福

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM