mrb*_*lah 107 c# regex asp.net
我有一串文本(大多数约5-6个单词),我需要转换.
目前文本看起来像:
THIS IS MY TEXT RIGHT NOW
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
This Is My Text Right Now
Run Code Online (Sandbox Code Playgroud)
我可以遍历我的字符串集合,但不知道如何执行此文本修改.
jsp*_*cal 246
string s = "THIS IS MY TEXT RIGHT NOW";
s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());
Run Code Online (Sandbox Code Playgroud)
Fil*_*ale 83
我可能更喜欢从CultureInfo(System.Globalization)调用ToTitleCase而不是Thread.CurrentThread(System.Threading)
string s = "THIS IS MY TEXT RIGHT NOW";
s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());
Run Code Online (Sandbox Code Playgroud)
但它应该与jspcal解决方案相同
编辑
实际上那些解决方案并不相同:CurrentThread- 电话 - > 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
参考文献:
Jam*_*xon 16
有几种方法可以将字符串的第一个字符串转换为大写字母.
第一种方法是创建一个方法,简单地限制第一个字符串,并使用子字符串追加字符串的其余部分:
public string UppercaseFirst(string s)
{
return char.ToUpper(s[0]) + s.Substring(1);
}
Run Code Online (Sandbox Code Playgroud)
第二种方式(稍微快一点)是将字符串拆分为char数组,然后重新构建字符串:
public string UppercaseFirst(string s)
{
char[] a = s.ToCharArray();
a[0] = char.ToUpper(a[0]);
return new string(a);
}
Run Code Online (Sandbox Code Playgroud)
未经测试但这样的事情应该有效:
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()));
Run Code Online (Sandbox Code Playgroud)
从本质上讲,它表示"在所有出现的字母数字字符之后执行正则表达式匹配,该字符串跟随另一个字母数字字符,然后将其替换为自身的小写版本"
小智 9
如果您在网页上使用,也可以使用CSS:
style="text-transform:capitalize;"
在建造大桌子时,速度是一个值得关注的问题,所以Jamie Dixon的第二个功能是最好的,但它并不完全有效......
它无法将所有字母都取小写,它只会将字符串的第一个字母大写,而不是字符串中每个单词的第一个字母...以下选项可以解决这两个问题:
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);
}
Run Code Online (Sandbox Code Playgroud)
虽然在这一点上,这仍然是最快的选择是不确定的,Regex乔治·莫尔提供的解决方案可能会更快......有足够关心的人应该测试它.
| 归档时间: |
|
| 查看次数: |
125006 次 |
| 最近记录: |