我需要一些帮助,我有一个全名字符串,我需要做的是分开并分别使用这个全名字符串作为firstname和lastname。
答案 0 :(得分:38)
如果您确定您有名字和姓氏,这将有效。
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()
的工作原理。但是,你必须记住,一些姓氏是复合名称,如@AlbertEin所指出的“Luis da Silva”。
这远非一个简单的问题需要解决。一些介词(法语,西班牙语,葡萄牙语等)是姓氏的一部分。这就是@John Saunders问“用什么语言?”的原因。 John还指出,前缀(先生,夫人)和后缀(Jr.,III,M.D。)可能会妨碍前提。
答案 1 :(得分:13)
您可以尝试使用空格解析它,但它不会起作用,例如:
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”。
答案 2 :(得分:9)
此解决方案适用于姓氏有多个单词的人。将第一个单词视为名字,并将其他所有内容作为姓氏。
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"
答案 3 :(得分:8)
尝试:
string fullName = "The mask lol";
string[] names = fullName.Split(' ');
string name = names.First();
string lasName = names.Last();
答案 4 :(得分:4)
您可以使用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
。
请注意,FirstName
的长度绝不会超过2
因此,使用以下代码,您可以很好地获得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];
}
:
CCorCLRControl::GetCLRManager
希望这个答案能为这个页面添加一些有用的东西。
答案 5 :(得分:3)
我建议使用Regex严格定义您的名字和姓氏。
答案 6 :(得分:3)
在nuget上有几种名称解析/拆分的实现。如果您深入了解NameParserSharp存储库,您还可以组合两个部分类并复制&amp;粘贴到自己的库中。
答案 7 :(得分:1)
这是我在项目中使用的一段c#代码。它将最后一个单词作为姓氏返回,其余单词作为名称返回。
<强>输出:强>
Mary Isobel Catherine O’Brien
-------------------------
Name : Mary Isobel Catherine , Surname : O’Brien
P.S。没有中间名,抱歉。
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;
}
答案 8 :(得分:1)
name =“ Tony Stark已死”;
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
}
答案 9 :(得分:0)
迟到总比不到好,这是我在许多应用程序中使用的解决方案。
string fullName = "John De Silva";
string[] names = fullName.Split(" ");
string firstName = names.First(); // John
string lastName = string.Join(" ", names.Skip(1).ToArray()); // De Silva
享受吧!
答案 10 :(得分:0)
您可以创建一个值对象来表示名称并在您的应用程序中使用它
public class Name
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string FullName { get; }
public Name(string name)
{
if (string.IsNullOrEmpty(name))
return;
FullName = name;
LoadFirstAndLastName();
}
private void LoadFirstAndLastName()
{
var names = FullName.Trim().Split(" ", 2);
FirstName = names.First();
if (names.Count() > 1)
LastName = names.Last();
}
public override string ToString() => FullName;
//Enables implicit set (Name name = "Rafael Silva")
public static implicit operator Name(string name) => new Name(name);
}
用法:
Name name = "Jhon Doe"; //FirstName = Jhon - LastName = Doe
Name name = new Name("Jhon Doe"); //FirstName = Jhon - LastName = Doe
Name name = new Name("Rafael Cristiano da Silva"); //FirstName = Rafael - LastName = Cristiano da Silva
//On class property
public Name Name {get; set; } = "Jhon Doe";
答案 11 :(得分:0)
有多种方法可以解决此问题。我的具体情况可以通过下面的代码示例解决。
例如
如果用户名中只有一个空格。
int idx = fullName.IndexOf(' '); //This customer name : Osman Veli
如果用户名中有多个空格。
if (fullName.Count(Char.IsWhiteSpace) > 1)
{
idx = fullName.LastIndexOf(' '); //This customer name : Osman Veli Sağlam
}
if (idx != -1)
{
// Osman Veli Sağlam
firstName = fullName.Substring(0, idx); // FirstName: Osman Veli
lastName = fullName.Substring(idx + 1); // LastName : Sağlam
}
答案 12 :(得分:0)
简单,简单的代码即可将诸如鲜花,爱情之类的内容转换为爱情鲜花(这适用于非常复杂的名称,例如威廉姆斯·琼斯,鲁珀特·约翰):
string fullname = "Flowers, Love";
string[] fullnameArray = fullname.Split(",");//Split specify a separator character, so it's removed
for (int i = fullnameArray.Length - 1; i >= fullnameArray.Length - 2; i--)
{
Write($"{fullnameArray[i].TrimStart() + " "}");
}
输出:爱情之花
相反。将“爱花”转换为“花,爱”:
string fullname = "Love Flowers";
int indexOfTheSpace = fullname.IndexOf(' ');
string firstname = fullname.Substring(0, indexOfTheSpace);
string lastname = fullname.Substring(indexOfTheSpace + 1);
WriteLine($"{lastname}, {firstname}");
答案 13 :(得分:0)
因此,如果您将第一个空格作为名称并将其作为姓氏,则会给我们
Person myPerson = new Person();
Misc tidyup = new Misc();
string[] result = tidyup.SplitFullName(tb1.Text);
foreach (string s in result)
{
Console.WriteLine(s);
if (result.First() == s)
{
myPerson.FirstName = s;
}
else
{
myPerson.LastName += s + " ";
Console.WriteLine(s);
Console.WriteLine(myPerson.LastName);
}
}
public string[] SplitFullName(string myName)
{
string[] names = myName.Split(' ');
//string firstName = names[0];
//string lastName = names[1];
return names;
}
答案 14 :(得分:0)
答案 15 :(得分:0)
对于基本用例,它很容易拆分为''或','然而由于各种不同的名称,这些并不总是有效。
答案 16 :(得分:0)
这是否像调用string.Split()一样简单,将一个空格作为拆分字符传递?或者这里有什么比较棘手的事情? (如果是后者,请用更多信息更新您的问题。)