如何将句子中每个单词的首字母大写?

11

可能重复问题:
如何将每个句子的第一个字母大写?

public static string CapitalizeEachWord(this string sentence)
{
    string[] words = sentence.Split();
    foreach (string word in words)
    {
        word[0] = ((string)word[0]).ToUpper();                
    }
}

我正在尝试为自己未来的项目创建帮助类的扩展方法。

其中一个特定的方法应该适当地将每个单词的第一个字母大写。但是,我无法使其正常工作。

它显示无法将 char 转换为 string,但我记得在某个时候能够这样做。也许我忘记了一些关键部分。

感谢您的建议。


@ChrisF:我不认为这是那个问题的重复。在另一个问题中,它问的是如何将每个句子的第一个单词大写。而在这里,我想大写每个单词的第一个字母。由于我可以使用.Split()拆分句子,所以我不需要正则表达式,但我的尝试没有成功——因此有这个问题。 - delete
@Thomas - 我的错误。那么这个怎么样:https://dev59.com/_0fRa4cB1Zd3GeqP-qPp?它是与语言无关的,但有一个C#的解决方案。 - ChrisF
其他人已经回答了你的问题,但是这里有一些建议。首先,你不能将 char 转换为 string,但是 myChar.ToString() 可以工作。其次,字符串是不可变的。你不能重新分配字符串中的任意字符(要以这种方式做,使用 string.ToCharArray(),在 char 数组上工作,然后调用 new string() 在该数组上)。 - Sapph
@Sapph:为什么(string)不起作用,但ToString()可以?.ToString()有什么不同之处? - delete
3个回答

23

使用这段代码,我们需要每次调用该方法。是否有任何覆盖方法,可以强制每个文本框在离开时转换为标题大小写? - Sunil Acharya
1
应该更新为使用CultureInfo.CurrentCulture.TextInfo而不是访问线程。请参见:https://msdn.microsoft.com/zh-cn/library/system.globalization.textinfo.totitlecase(v=vs.110).aspx - Max
1
还要注意的是 - 如果您的字符串全是大写,这不会转换文本(它看起来像一个缩写词)。使用 textInfo.ToTitleCase(title.ToLower()) 将其转换为标题大小写。 - Jem

9
以下是我的做法:
public static string ProperCase(string stringToFormat)
{
    CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
    TextInfo textInfo = cultureInfo.TextInfo;

    // Check if we have a string to format
    if (String.IsNullOrEmpty(stringToFormat))
    {
        // Return an empty string
        return string.Empty;
    }

    // Format the string to Proper Case
    return textInfo.ToTitleCase(stringToFormat.ToLower());
}   

2
你的解决方案显然太长了——他的机器一次只能复制粘贴3行以上的代码 ;) - Barrie Reader
1
@Neurofluxation:这个傲慢的话是怎么回事?似乎网络匿名让一些人变得很恶劣。 - delete
6
微笑 哦,SO上没有幽默感 - 我忘了。 - Barrie Reader

7

试试这个:

        string inputString = "this is a test";

        string outputString = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(inputString);

这是正确的现代答案。 - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接