2015-01-16 66 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

相关问题