将所有的第一个字母转换为大写,每个单词都要低一些
我有一串文字(大约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());
我可能更喜欢从CultureInfo ( System.Globalization )比Thread.CurrentThread ( System.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();
- 检查对象是不是types(!=相当于“是”) – C#
- C#ASP.NET单一login实现
- WebAPI 2中的DefaultInlineConstraintResolver错误
- 无法使用DotNetOpenAuth ServiceProvider使用PLAINTEXT签名
- asp:TextBox ReadOnly = true或Enabled = false?
- 索引(从零开始)必须大于或等于零
- AppFabric无法从重新启动恢复
- jqGrid:使用beforeProcessing填充filterToolbarselect框
- UserControl,WebControl,RenderedControl和CompositeControl有什么区别?