簡體   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