如何将全名字符串分隔为firstname和lastname字符串?

use*_*456 24 c# string string-parsing

我需要一些帮助,我有一个全名字符串,我需要做的是分开并分别使用这个全名字符串作为firstname和lastname.

Adr*_*iro 39

如果您确定您有名字和姓氏,这将有效.

string fullName = "Adrian Rules";
var names = fullName.Split(' ');
string firstName = names[0];
string lastName = names[1];
Run Code Online (Sandbox Code Playgroud)

确保检查长度names.

names.Length == 0 //will not happen, even for empty string
names.Length == 1 //only first name provided (or blank)
names.Length == 2 //first and last names provided
names.Length > 2 //first item is the first name. last item is the last name. Everything else are middle names
Run Code Online (Sandbox Code Playgroud)

更新

当然,这是一个相当简化的问题视图.我的答案的目的是解释如何string.Split()工作.但是,你必须记住,一些姓氏是复合名称,如@AlbertEin所指出的"Luis da Silva".

这远非一个简单的问题需要解决.一些介词(法语,西班牙语,葡萄牙语等)是姓氏的一部分.这就是@John Saunders问"用什么语言?"的原因.约翰还指出,前缀(先生,夫人)和后缀(Jr.,III,MD)可能会妨碍.


alb*_*ein 12

您可以尝试使用空格解析它,但它不会起作用,例如:

var fullName = "Juan Perez";
var name = fullName.Substring(0, fullName.IndexOf(" "));
var lastName = fullName.Substring(fullName.IndexOf(" ") + 1);
Run Code Online (Sandbox Code Playgroud)

但是,如果用户输入很多,那就会失败,如果他有两个名字呢?"Juan Pablo Perez".

名称是复杂的东西,因此,不可能总是知道给定字符串中的名字和姓氏是哪个部分.

编辑

你不应该使用string.Split方法来提取姓氏,一些姓氏是由两个或多个单词组成的,例如,我的朋友的姓氏是"Ponce de Leon".


Wir*_*dIn 11

此解决方案适用于姓氏多于一个字的人.将第一个单词视为名字,并将其他所有内容作为姓氏.

public static string getLastNameCommaFirstName(String fullName) {
    List<string> names = fullName.Split(' ').ToList();
    string firstName = names.First();
    names.RemoveAt(0);

    return String.Join(" ", names.ToArray()) + ", " + firstName;            
} 
Run Code Online (Sandbox Code Playgroud)

例如,将Brian De Palma传递给上述函数将返回"De Palma,Brian"

getLastNameFirst("Brian De Palma");
//returns "De Palma, Brian"
Run Code Online (Sandbox Code Playgroud)


Meh*_*ani 8

您可以使用此版本(MSDN)Split方法,如下所示:

var testcase = "John Doe";
var split = testcase.Split(new char[] { ' ' }, 2);
Run Code Online (Sandbox Code Playgroud)

在这种情况下split[0]Johnsplit[1]Deo。另一个例子:

var testcase = "John Wesley Doe";
var split = testcase.Split(new char[] { ' ' }, 2);
Run Code Online (Sandbox Code Playgroud)

在这种情况下split[0]Johnsplit[1]Wesley Doe

请注意,长度split永远不会超过 2

因此,与下面的代码,你可以得到FirstNameLastName很好的:

var firstName = "";
var lastName = "";
var split = testcase.Split(new char[] { ' ' }, 2);
if (split.Length == 1)
{
    firstName = "";
    lastName = split[0];
}
else
{
    firstName = split[0];
    lastName = split[1];
}
Run Code Online (Sandbox Code Playgroud)

希望这个答案能为这个页面添加一些有用的东西。


The*_*ask 7

尝试:

  string fullName = "The mask lol"; 
    string[] names = fullName.Split(' '); 
    string name = names.First();
    string lasName = names.Last(); 
Run Code Online (Sandbox Code Playgroud)

  • 这是邪恶的解决方案.. JOhn Van Meter 其中“Van Meter”是姓氏。你的解决方案将完全搞砸姓氏 (2认同)