我需要帮助处理这个问题,我有一个包含完整名字的字符串,需要将其分离并将其作为名和姓分别使用。
我需要帮助处理这个问题,我有一个包含完整名字的字符串,需要将其分离并将其作为名和姓分别使用。
如果你确定有名字和姓氏,这个方法会起作用。
string fullName = "Adrian Rules";
var names = fullName.Split(' ');
string firstName = names[0];
string lastName = names[1];
请确保检查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
更新
当然,这只是对这个问题的一个相当简化的视图。我的回答的目的是解释string.Split()
的工作原理。但你必须记住,一些姓氏是复合的,比如"Luis da Silva",正如@AlbertEin所指出的那样。
这远非一个简单的问题可以解决。一些介词(在法语、西班牙语、葡萄牙语等中)是姓氏的一部分。这就是为什么@John Saunders问“是哪种语言?”。John还指出前缀(先生,夫人)和后缀(Jr.,III,M.D.)可能会妨碍处理。
var fullName = "Juan Perez";
var name = fullName.Substring(0, fullName.IndexOf(" "));
var lastName = fullName.Substring(fullName.IndexOf(" ") + 1);
但是如果用户输入的是两个名字呢,比如 "Juan Pablo Perez",那么这种方法就会失败。
姓名是很复杂的东西,因此在给定一个字符串时,无法总是确定哪部分是名字的首部和尾部。
编辑
你不应该使用string.Split方法来提取姓氏,因为有些姓氏由两个或更多单词组成,例如,我的一个朋友的姓氏是"Ponce de Leon"。
这个解决方案适用于姓氏由多个单词组成的人。将第一个单词视为名字,其余部分作为姓氏。
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;
}
例如将Brian De Palma传递到上述函数中,将返回"De Palma, Brian"
getLastNameFirst("Brian De Palma");
//returns "De Palma, Brian"
您可以使用此版本(MSDN)的Split
方法,如下所示:
var testcase = "John Doe";
var split = testcase.Split(new char[] { ' ' }, 2);
split[0]
会是 John
,而split[1]
则会是 Deo
。另一个例子:var testcase = "John Wesley Doe";
var split = testcase.Split(new char[] { ' ' }, 2);
split[0]
将是John
,而split[1]
将是Wesley Doe
。split
的长度永远不会超过2。FirstName
和LastName
: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];
}
尝试:
string fullName = "The mask lol";
string[] names = fullName.Split(' ');
string name = names.First();
string lasName = names.Last();
string name = names.First();
? - Filburt变量名为"Tony Stark is dead"。
get_first_name(String name) {
var names = name.split(' ');
String first_name= "";
for (int i = 0; i != names.length; i++) {
if (i != names.length - 1)
{
if (i == 0) {
first_name= first_name+ names[i];
} else {
first_name= first_name+ " " + names[i];
}
}
}
return first_name; // Tony Stark is
}
get_last_name(String name) {
var names = name.split(' ');
return names[names.length - 1].toString(); // dead
}
这里有一段我在项目中使用的C#代码。它将最后一个单词作为姓氏,其余部分作为名字返回。
输出结果:
Mary Isobel Catherine O’Brien
-------------------------
Name : Mary Isobel Catherine , Surname : O’Brien
附言:没有中间名,抱歉。
public static string[] SplitFullNameIntoNameAndSurname(string pFullName)
{
string[] NameSurname = new string[2];
string[] NameSurnameTemp = pFullName.Split(' ');
for (int i = 0; i < NameSurnameTemp.Length; i++)
{
if (i < NameSurnameTemp.Length - 1)
{
if (!string.IsNullOrEmpty(NameSurname[0]))
NameSurname[0] += " " + NameSurnameTemp[i];
else
NameSurname[0] += NameSurnameTemp[i];
}
else
NameSurname[1] = NameSurnameTemp[i];
}
return NameSurname;
}
string fullName = "John De Silva";
string[] names = fullName.Split(" ");
string firstName = names.First(); // John
string lastName = string.Join(" ", names.Skip(1).ToArray()); // De Silva
享受吧!
"Edimar*Lima",* = 分隔符
- Tocco