字符串转换,每个单词首字母大写

7

i want to convert:

HECHT, WILLIAM 

为了

Hecht, William

在C#中,有没有优雅的方法来做到这一点?

5个回答

31
string name = "HECHT, WILLIAM";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(name.ToLower());

(注意它只能将小写字母转换为大写字母,因此要从小写字母开始)


那个东西在里面吗?哦天啊。+1 - R. Martinho Fernandes
@Marc:ToTitleCase() 函数能正确处理 "Peter O'Toole" 和 "Mary Jones-Smith" 吗? - Grant Wagner
@Grant:Peter 需要一个新名字,但 Mary 的名字可以不变。 - Fredrik Mörk

5

0
    public static string CamelCase(this string s)
    {
        if (String.IsNullOrEmpty(s))
            s = "";
        string phrase = "";
        string[] words = s.Split(' ');
        foreach (string word in words)
        {
            if (word.Length > 1)
                phrase += word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower() + " ";
            else
                phrase += word.ToUpper() + " ";

        }
        return phrase.Trim();
    }

@TruthStands:对于“Peter O'Toole”和“Mary Smith-Jones”没有产生正确的结果。 - Grant Wagner
没错,但修复这个问题并不难。 - TruthStands

0

我投了Marc的答案,但这个也可以:

string s = Microsoft.VisualBasic.Strings.StrConv("HECHT, WILLIAM", VbStrConv.ProperCase,0);

你需要添加适当的引用,但我相信它可以处理所有大写输入。


-2
我之前遇到了上面代码的问题,所以我稍微修改了一下,然后它就正常工作了。来自智利的问候。好文章。
private void label8_Click(object sender, EventArgs e)
{
nombre1.Text= NOMPROPIO(nombre1.Text);
}

string NOMPROPIO(string s)
{
  if (String.IsNullOrEmpty(s))
     s = "";
  string phrase = "";
  string[] words = s.Split(' ');
  foreach (string word in words)
  {
    if (word.Length > 1)
    phrase += word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower() + " ";
    else
    phrase += word.ToUpper() + " ";
  }
return phrase.Trim();
}

请在此网站上仅使用英语(https://meta.stackexchange.com/questions/13676)。对于西班牙语,请访问Stack Overflow en español(https://es.stackoverflow.com/)。 - Tom Zych

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