如何将全名字符串分割成姓和名字符串
本文关键字:字符串 分割 全名 | 更新日期: 2023-09-27 18:01:30
我需要一些帮助,我有一个全名字符串,我需要做的是分开,并使用这个全名字符串作为名字和姓氏分开。
如果您确定您有名字和姓氏,则此操作将有效。
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还注意到前缀(Mr., Mrs.)和后缀(Jr., III, M.D.)可能会成为阻碍。
你可以试着用空格来解析它,但这是行不通的,例如:
var fullName = "Juan Perez";
var name = fullName.Substring(0, fullName.IndexOf(" "));
var lastName = fullName.Substring(fullName.IndexOf(" ") + 1);
但是如果有大量的用户输入,那就失败了,如果他有两个名字呢?"胡安·巴勃罗·佩雷斯"。
名字是很复杂的东西,所以,不可能总是知道给定字符串中哪一部分是名字哪一部分是姓氏。
编辑
你不应该使用string。拆分方法提取姓氏,有些姓氏是由两个或多个单词组成的,例如,我的一个朋友的姓氏是"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];
}
希望这个答案能给这个页面增加一些有用的东西。
Try:
string fullName = "The mask lol";
string[] names = fullName.Split(' ');
string name = names.First();
string lasName = names.Last();
我建议使用Regex严格定义您的姓和名。
在nuget上有几种名称解析/拆分的实现。如果您深入到NameParserSharp存储库中,您还可以将两个部分类组合起来并复制&粘贴到你自己的库中。
NameParserSharp
更多关于Nuget的消息
name ="托尼·斯塔克死了"
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.Split()一样简单,传递单个空格作为分割字符?还是有更棘手的事情?(如果是后者,请用更多信息更新您的问题)
对于基本用例来说,很容易在' '或' '上进行拆分,但是由于各种名称中包含不同的东西,这并不总是有效的。
你可以尝试移植这个PHP库https://github.com/joshfraser/PHP-Name-Parser/blob/master/parser.php
所以如果你把第一个空格作为Name,剩下的作为姓氏,这会得到
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;
}
轻松,简单的代码转换像Flowers, Love到Love Flowers(这适用于非常复杂的名称,如Williams Jones, Rupert John):
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() + " "}");
}
输出: Love Flowers
反过来。《爱的花》变成了《花,爱》
string fullname = "Love Flowers";
int indexOfTheSpace = fullname.IndexOf(' ');
string firstname = fullname.Substring(0, indexOfTheSpace);
string lastname = fullname.Substring(indexOfTheSpace + 1);
WriteLine($"{lastname}, {firstname}");
这个方法不止一个。我的具体情况可以用下面的代码示例来解决。
例如如果用户名中只有一个空格。
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
}
您可以创建一个值对象来表示一个名称,并在您的应用程序中使用它
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";
迟来总比不来好,以下是我在许多应用程序中使用的解决方案。
string fullName = "John De Silva";
string[] names = fullName.Split(" ");
string firstName = names.First(); // John
string lastName = string.Join(" ", names.Skip(1).ToArray()); // De Silva
享受吧!
Sub SplitFullName(Full_Name As String)
Dim names = Full_Name.Split(" ")
Dim FirstName As String = ""
Dim MiddletName As String = ""
Dim LastName As String = ""
If names.Count = 0 Then
FirstName = ""
MiddletName = ""
LastName = ""
ElseIf names.Count = 1 Then
FirstName = names(0)
ElseIf names.Count = 2 Then
FirstName = names(0)
LastName = names(1)
Else
FirstName = names(0)
For i = 1 To names.Count - 2
MiddletName += " " & names(i)
Next
LastName = names(names.Count - 1)
End If
MsgBox("The first name is: " & FirstName & "; The middle name is: " & MiddletName & "; The last name is: " & LastName)
End Sub
我已经添加了一些检查来获得想要的结果例如,其他解决方案工作,但当我故意占用两个空格时,它不工作,所以这里是解决方案。
final name = ' sambhav';
final words = name.trim().split(' ');
final firstName = words[0];
final lastName = words.length > 1 ? words[words.length - 1] : '';
print('first name : $firstName, last name : $lastName');
结果input : Sambhav jain // first name : Sambhav, last name : jain
input : Sambhav the jain // first name : Sambhav, last name : jain
input : Sambhav // first name : Sambhav, last name :
这是我的扩展名。它返回最后一个单词作为姓,其余的作为名。
public static void SplitFullName(this string fullName, out string firstName, out string lastName)
{
firstName = string.Empty;
lastName = string.Empty;
if (!string.IsNullOrEmpty(fullName))
{
lastName = string.Empty; firstName = string.Empty;
int splitIndex = fullName.LastIndexOf(' ');
if (splitIndex >= 0)
{
firstName = fullName.Substring(0, splitIndex);
lastName = fullName.Substring(splitIndex + 1);
}
else
firstName = fullName;
}
}
用法:
"Micheal".SplitFullName(out string first, out string last);
// first = "Micheal"
// last = ""
"Micheal Jackson".SplitFullName(out string first, out string last);
// first = "Micheal"
// last = "Jackson"
"Micheal Joseph Jackson".SplitFullName(out string first, out string last);
// first = "Micheal Joseph"
// last = "Jackson"
顺便说一下Visual Studio Intellisense已经失控了!我只编写了符合if
条件的代码,其余的由Intellisense完成。
解决方案在飞镖/颤振:
var fullName = 'Jawad Hussain Abbasi';
firstName = fullName.split(' ')[0];
lastName = fullName.split(' ').skip(1).join(" ");
log('First Name: $firstName'); // Jawad
log('Last Name: $lastName'); // Hussain Abbasi