2015-01-16 155 views
2

我想將字符串格式化爲大寫字符格式(即首字母大寫)。將字符串中的第一個字符大寫首字母大寫

For Example - 
       If Input is: "NEW YORK CITY" 
       then the desired output is: "New York City" 

*我的字符串最多有3個單詞。

之後,谷歌搜索它,我發現了幾種方法來實現這種方法,但我不明白這是最好的辦法。

方法1:

string City = "NEW YORK CITY"; 
City = City.ToLower(); 
string Capatilize_City = ""; 
Capatilize_City = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(City); 

Demo : Ideone with 1st method

法第二:

string City = "NEW YORK CITY"; 
string[] lstWord = City.ToLower().Split(' '); 
string Capatilize_City = ""; 
foreach (string s in lstWord) 
{ 
    string z = s.Substring(0, 1).ToUpper() + s.Substring(1, s.Length - 1); 
    Capatilize_City += " " + z; 
} 
Capatilize_City = Capatilize_City.Trim(); 

Demo: Ideone with 2nd method

w ^這些代碼最適合使用(性能和速度副作用)?

+0

你的第二種方法有很多分配,所以我的猜測是它會變慢。分析器可以給你要告訴的數據。 –

+0

儘量避免手動。使用方法1。它也是可讀且更短的。 – Amit

+1

知道哪個更快的唯一方法就是測試它們。機會都很快,在這種情況下更簡單一些。 – dbc

回答

5

你應該去的代碼大小,可讀性,可理解性,可維護性,所以明顯的贏家是...


編輯

所以我建議

Capatilize_City = 
    System.Globalization.CultureInfo.CurrentCulture.TextInfo 
     .ToTitleCase(City.ToLower()); 
+0

那麼,在上述情況下,第一種方法是最好的? –

+0

是的,我認爲在我的答案中使用標準這是**非常明顯 – DrKoch

1

這一班輪也可以工作:

string Capatilize_City = 
    String.Join(
     " ", 
     City 
      .ToLower() 
      .Split(' ') 
      .Select(s => 
       s.Substring(0, 1).ToUpper() 
       + s.Substring(1, s.Length - 1))); 

除非你是通過大量字符串來完成這個任務,否則不應該成爲任何方法的問題。

我建議你讓自己成爲一個名爲.ToTitleCase()的字符串擴展方法並使用它 - 然後如果你需要改變實現,你可以在你的代碼中的一個地方做到這一點。

+0

爲什麼有人會使用此代替現有的ToTitleCase()? – webnoob

+0

我不會使用它,除了OP提出了語義等價的方法。我只是提供一種「更清潔」的方式來處理他的方法。此外,可能會有特殊情況(赦免雙關語) - 像首字母縮略詞問題 - OP想要覆蓋並且現有的ToTitleCase()可能無法爲OP做正確的事情。爲什麼他會提出這個問題呢? – Enigmativity

相關問題