C# 姓氏首字母大写

C# 姓氏首字母大写,c#,string,formatting,C#,String,Formatting,所以我从数据库中获取所有大写字母的姓氏数据。我需要格式化文本,使名称每个部分的第一个字母大写。目前,我有下面的代码,用于解释具有双重姓氏的人(例如,SMITH-JONES变为SMITH-JONES),但在检查结果时,我注意到当涉及到像VAN BEBBER这样的名字时,我仍然有一个错误,VAN BEBBER变为VAN BEBBER。有什么建议吗 var fullLast = Last.Split('-'); var lastFormatted = new StringBuilder(); for

所以我从数据库中获取所有大写字母的姓氏数据。我需要格式化文本,使名称每个部分的第一个字母大写。目前,我有下面的代码,用于解释具有双重姓氏的人(例如,SMITH-JONES变为SMITH-JONES),但在检查结果时,我注意到当涉及到像VAN BEBBER这样的名字时,我仍然有一个错误,VAN BEBBER变为VAN BEBBER。有什么建议吗

var fullLast = Last.Split('-');
var lastFormatted = new StringBuilder();

for (var i = 0; i < fullLast.Length; i++)
{
    fullLast[i] = char.ToUpper(fullLast[i][0]) + fullLast[i].Substring(1).ToLower();
    lastFormatted.Append(fullLast[i]);
    if (i != fullLast.Length - 1)
        lastFormatted.Append("-");
}

return string.Format(
    "{0} {1}",
    char.ToUpper(First[0]) + First.Substring(1).ToLower(),
    lastFormatted);
var fullLast=Last.Split('-');
var lastFormatted=新的StringBuilder();
for(var i=0;i
这是一个已知的名称问题-事情极不一致。有关更多信息,请阅读本文:

在您的示例中,您引用了姓氏“VAN BEBBER”,希望将其大写为“VanBebber”。然而,正如文章所指出的,来自世界其他地区的其他组合将破坏大多数标准化尝试——例如,姓氏“BIN OSMAN”将正确地大写为“BINOsman”——没有大写字母“b”表示“BIN”,意思是“的儿子”因此不符合西方化的姓氏概念

您提到用破折号分割姓氏,这很可能源于使用连字符的姓氏的想法-您是否也检查名字中的破折号?该网站给出了一个名为“María-Jose Carreño Quiñones”的示例,由于名字(用连字符分隔)和姓氏(用空格分隔),因此很难解析。您的程序如何使用该名称

为了更直接地回答您的问题,而不引入更多的边缘大小写-您已经知道如何通过破折号拆分字符串-如果您想用空格覆盖姓氏的大小写,您应该进一步将姓氏字符串按空格拆分,然后才将不同拆分字符串的第一个字母大写

或者,正如Dai在评论中提到的,您可以使用
ToTitleCase
方法——这里有更多信息:这很可能是一个比尝试自己制作更好的解决方案。但是,本页引用的事实是,并非所有语言都以相同的方式大写(事实上,不同的姓氏可能来自不同的地区/文化/语言),因此设置正确的语言可能并不总是产生正确的姓氏大写。请注意,它将在Osman中将“BIN-OSMAN”大写为“B”,这在技术上是不正确的

下面是该页面中的一个快速示例:

// Defines the String* with mixed casing.
String^ myString = "wAr aNd pEaCe";

// Creates a TextInfo based on the "en-US" culture.
/**** Personal Note - en-US may not be the correct culture for every last name! ****/
CultureInfo^ MyCI = gcnew CultureInfo( "en-US",false );
TextInfo^ myTI = MyCI->TextInfo;

// Changes a String* to lowercase. Outputs "War and Peace"
Console::WriteLine( "\"{0}\" to titlecase: {1}", myString, myTI->ToTitleCase( myString )

这是一个已知的名称问题-事情非常不一致。有关更多信息,请阅读本文:

在您的示例中,您引用了姓氏“VAN BEBBER”,希望将其大写为“VanBebber”。然而,正如文章所指出的,来自世界其他地区的其他组合将破坏大多数标准化尝试——例如,姓氏“BIN OSMAN”将正确地大写为“BINOsman”——没有大写字母“b”表示“BIN”,意思是“的儿子”因此不符合西方化的姓氏概念

您提到用破折号分割姓氏,这很可能源于使用连字符的姓氏的想法-您是否也检查名字中的破折号?该网站给出了一个名为“María-Jose Carreño Quiñones”的示例,由于名字(用连字符分隔)和姓氏(用空格分隔),因此很难解析。您的程序如何使用该名称

为了更直接地回答您的问题,而不引入更多的边缘大小写-您已经知道如何通过破折号拆分字符串-如果您想用空格覆盖姓氏的大小写,您应该进一步将姓氏字符串按空格拆分,然后才将不同拆分字符串的第一个字母大写

或者,正如Dai在评论中提到的,您可以使用
ToTitleCase
方法——这里有更多信息:这很可能是一个比尝试自己制作更好的解决方案。但是,本页引用的事实是,并非所有语言都以相同的方式大写(事实上,不同的姓氏可能来自不同的地区/文化/语言),因此设置正确的语言可能并不总是产生正确的姓氏大写。请注意,它将在Osman中将“BIN-OSMAN”大写为“B”,这在技术上是不正确的

下面是该页面中的一个快速示例:

// Defines the String* with mixed casing.
String^ myString = "wAr aNd pEaCe";

// Creates a TextInfo based on the "en-US" culture.
/**** Personal Note - en-US may not be the correct culture for every last name! ****/
CultureInfo^ MyCI = gcnew CultureInfo( "en-US",false );
TextInfo^ myTI = MyCI->TextInfo;

// Changes a String* to lowercase. Outputs "War and Peace"
Console::WriteLine( "\"{0}\" to titlecase: {1}", myString, myTI->ToTitleCase( myString )

这是一个已知的名称问题-事情非常不一致。有关更多信息,请阅读本文:

在您的示例中,您引用了姓氏“VAN BEBBER”,希望将其大写为“VanBebber”。然而,正如文章所指出的,来自世界其他地区的其他组合将破坏大多数标准化尝试——例如,姓氏“BIN OSMAN”将正确地大写为“BINOsman”——没有大写字母“b”表示“BIN”,意思是“的儿子”因此不符合西方化的姓氏概念

您提到用破折号分割姓氏,这很可能源于使用连字符的姓氏的想法-您是否也检查名字中的破折号?该网站给出了一个名为“María-Jose Carreño Quiñones”的示例,由于名字(用连字符分隔)和姓氏(用空格分隔),因此很难解析。你的职业选手会怎么做
var names = fullName.Split(' ');
        var formatted = new StringBuilder();
        foreach(string name in names)
        {
            if(name.Contains('-'))
            {
                var nonHyphanatedNames = name.Split('-');
                    foreach (var nonHyphanatedName in nonHyphanatedNames)
                    {
                        formatted.Append(char.ToUpper(nonHyphanatedName[0]) + nonHyphanatedName.Substring(1).ToLower() + '-');
                    }

            }
            else
            {
                formatted.Append(char.ToUpper(name[0]) + name.Substring(1).ToLower() + ' ');
            }


        }
        //remove last field
        formatted.Remove(formatted.Length - 1, 1);
        Console.Write(formatted);