tag*_*s2k 16
这是一个在C#中执行此操作的简单静态方法:
public static string ToTitleCaseInvariant(string targetString)
{
return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}
Run Code Online (Sandbox Code Playgroud)
Ish*_*eel 13
我会警惕自动提升所有空格前面的单词,在这种情况下我会冒着吸引挑剔的愤怒的风险.
我至少会考虑为文章和连词等异常情况实现字典.看吧:
"美女和野兽"
当谈到专有名词时,事情变得更加丑陋.
eng*_*ech 10
这是一个Perl解决方案http://daringfireball.net/2008/05/title_case
这是一个Ruby解决方案http://frankschmitt.org/projects/title-case
这是一个Ruby单行解决方案:http://snippets.dzone.com/posts/show/4702
'some string here'.gsub(/\b\w/){$&.upcase}
Run Code Online (Sandbox Code Playgroud)
单行代码正在做的是使用正则表达式替换每个单词的第一个字符及其大写版本.
要在C语言中使用它,请使用ascii代码(http://www.asciitable.com/)查找char的整数值并从中减去32.
如果您计划接受az和AZ之外的字符,这是一个糟糕的解决方案.
例如:ASCII 134:å,ASCII 143:Å.
使用算术可以得到:ASCII 102:f
使用库调用,不要假设您可以对字符使用整数运算来获取有用的东西.Unicode很棘手.
在Silverlight ToTitleCase中,TextInfo课堂上没有.
这是一个简单的基于正则表达式的方法.
注意:Silverlight没有预编译的正则表达式,但对我来说,这种性能损失不是问题.
public string TitleCase(string str)
{
return Regex.Replace(str, @"\w+", (m) =>
{
string tmp = m.Value;
return char.ToUpper(tmp[0]) + tmp.Substring(1, tmp.Length - 1).ToLower();
});
}
Run Code Online (Sandbox Code Playgroud)
在Java中,您可以使用以下代码.
public String titleCase(String str) {
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (i == 0) {
chars[i] = Character.toUpperCase(chars[i]);
} else if ((i + 1) < chars.length && chars[i] == ' ') {
chars[i + 1] = Character.toUpperCase(chars[i + 1]);
}
}
return new String(chars);
}
Run Code Online (Sandbox Code Playgroud)