将所有的第一个字母转换为大写,每个单词都要低一些

我有一串文字(大约5-6个字),我需要转换。

目前的文字如下所示:

THIS IS MY TEXT RIGHT NOW 

我想将其转换为:

 This Is My Text Right Now 

我可以遍历我的string集合,但不知道如何去执行这个文本修改。

 string s = "THIS IS MY TEXT RIGHT NOW"; s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.toLower()); 

我可能更喜欢从CultureInfoSystem.Globalization )比Thread.CurrentThreadSystem.Threading )调用ToTitleCase

 string s = "THIS IS MY TEXT RIGHT NOW"; s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()); 

但是它应该和jspcal解决scheme一样

编辑

其实这些解决scheme是不一样的CurrentThread –calls – > CultureInfo


System.Threading.Thread.CurrentThread.CurrentCulture

 string s = "THIS IS MY TEXT RIGHT NOW"; s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()); IL_0000: ldstr "THIS IS MY TEXT RIGHT NOW" IL_0005: stloc.0 // s IL_0006: call System.Threading.Thread.get_CurrentThread IL_000B: callvirt System.Threading.Thread.get_CurrentCulture IL_0010: callvirt System.Globalization.CultureInfo.get_TextInfo IL_0015: ldloc.0 // s IL_0016: callvirt System.String.ToLower IL_001B: callvirt System.Globalization.TextInfo.ToTitleCase IL_0020: stloc.0 // s 

System.Globalization.CultureInfo.CurrentCulture

 string s = "THIS IS MY TEXT RIGHT NOW"; s = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()); IL_0000: ldstr "THIS IS MY TEXT RIGHT NOW" IL_0005: stloc.0 // s IL_0006: call System.Globalization.CultureInfo.get_CurrentCulture IL_000B: callvirt System.Globalization.CultureInfo.get_TextInfo IL_0010: ldloc.0 // s IL_0011: callvirt System.String.ToLower IL_0016: callvirt System.Globalization.TextInfo.ToTitleCase IL_001B: stloc.0 // s 

参考文献:

有几种方法可以将string的第一个字符转换为大写。

第一种方法是创build一个方法来简单地覆盖第一个字符,并使用子string附加其余的string:

 public string UppercaseFirst(string s) { return char.ToUpper(s[0]) + s.Substring(1); } 

第二种方法(稍微快一点)是将string拆分成一个char数组,然后重新构buildstring:

 public string UppercaseFirst(string s) { char[] a = s.ToCharArray(); a[0] = char.ToUpper(a[0]); return new string(a); } 

如果您在网页上使用,您也可以使用CSS:

style="text-transform:capitalize;"

未经testing,但这样的事情应该工作:

 var phrase = "THIS IS MY TEXT RIGHT NOW"; var rx = new System.Text.RegularExpressions.Regex(@"(?<=\w)\w"); var newString = rx.Replace(phrase,new MatchEvaluator(m=>m.Value.ToLowerInvariant())); 

从本质上讲,它表示“在所有出现的字母数字字符之前执行正则expression式匹配,该字符遵循另一个字母数字字符,然后用它自己的小写字母replace它”

当build立大桌子速度是一个问题,所以杰米·迪克森的第二个function是最好的,但它不完全是现在工作…

它不能把所有的字母都写成小写字母,而只能把string的第一个字母大写,而不是string中每个单词的第一个字母……下面的选项可以解决这两个问题:

  public string UppercaseFirstEach(string s) { char[] a = s.ToLower().ToCharArray(); for (int i = 0; i < a.Count(); i++ ) { a[i] = i == 0 || a[i-1] == ' ' ? char.ToUpper(a[i]) : a[i]; } return new string(a); } 

虽然在这一点上,这是否仍然是最快的select还不确定,但George Mauer提供的Regex解决scheme可能会更快一些,关心的人应该testing一下。

我不知道下面的解决scheme是比jspcal的答案更有效或者更低效的,但是我敢肯定它比Jamie和George's更less的创build对象。

 string s = "THIS IS MY TEXT RIGHT NOW"; StringBuilder sb = new StringBuilder(s.Length); bool capitalize = true; foreach (char c in s) { sb.Append(capitalize ? Char.ToUpper(c) : Char.ToLower(c)); capitalize = !Char.IsLetter(c); } return sb.ToString();