tags2k.. 16

这是一个在C#中执行此操作的简单静态方法:

public static string ToTitleCaseInvariant(string targetString)
{
    return System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(targetString);
}

  • 如果这不是有史以来最长的资格......"Throw.In.Todays.News.While.Youre.At.It(...);` (12认同)
  • 不适用于silverlight.见其他C#答案 (2认同)
  • 虽然要注意,如果起始字符串全部为大写,则必须首先调用`String.ToLower`,因为`ToTitleCase`不适用于所有大写字符串. (2认同)
  • -1这不是语言不可知的. (2认同)

Ishmaeel.. 13

我会警惕自动提升所有空格前面的单词,在这种情况下我会冒着吸引挑剔的愤怒的风险.

我至少会考虑为文章和连词等异常情况实现字典.看吧:

"美女和野兽"

当谈到专有名词时,事情变得更加丑陋.


engtech.. 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}

单行代码正在做的是使用正则表达式替换每个单词的第一个字符及其大写版本.


Bill.. 8

要在C语言中使用它,请使用ascii代码(http://www.asciitable.com/)查找char的整数值并从中减去32.

如果您计划接受az和AZ之外的字符,这是一个糟糕的解决方案.

例如:ASCII 134:å,ASCII 143:Å.
使用算术可以得到:ASCII 102:f

使用库调用,不要假设您可以对字符使用整数运算来获取有用的东西.Unicode很棘手.


Simon_Weaver.. 6

在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();
        });
    }


cmcculloh.. 5

用什么语言?

在PHP中它是:

ucwords()

例:

$HelloWorld = ucwords('hello world');


Lehane.. 5

如果您使用的语言具有受支持的方法/功能,那么只需使用它(如在C#ToTitleCase方法中)

如果没有,那么您将需要执行以下操作:

  1. 读入字符串
  2. 拿第一个字
  3. 将该单词的第一个字母大写1
  4. 前进,找到下一个单词
  5. 如果不在字符串的末尾,请转到3,否则退出

1要将其大写,例如,C - 使用ascii代码查找char的整数值并从中减去32.

在代码中需要更多的错误检查(确保有效的字母等),并且"大写"功能将需要在字母上施加某种"标题 - 案例方案"以检查不需要的单词被充分利用('和','但'等等是一个好的计划)


Randal Schwa.. 5

在Perl中:

$string =~ s/(\w+)/\u\L$1/g;

甚至在FAQ中也是如此.


用户甲.. 5

在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);
}