Мне нужна помощь с этим, у меня есть строка полного имени, и все, что мне нужно сделать, это разделить и использовать эту строку полного имени как имя и фамилию отдельно.
Это сработает, если вы уверены, что у вас есть имя и фамилия.
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.
Это далеко не простая проблема для решения. Некоторые предлоги (на французском, испанском, португальском и т. Д.) Являются частью фамилии. Вот почему @John Saunders спросил «на каком языке?». Джон также отметил, что префиксы (Mr., Mrs.) и суффиксы (Jr., III, M.D.) могут мешать.
Вы можете использовать эту версию (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];
}
Надеюсь, этот ответ добавит что-то полезное на эту страницу.
Существует несколько реализаций разбора / разделения имен в nuget. Если вы погрузитесь в репозиторий NameParserSharp, вы также можете просто объединить два частичных класса и копировать & amp; вставьте в свою собственную библиотеку.
Это так же просто, как вызывать string.Split () , передавая один пробел в качестве символа разделения? Или здесь происходит что-то более хитрое? (Если последнее, пожалуйста, обновите ваш вопрос с более подробной информацией.)
Так что, если вы возьмете Первое пространство за Имя, а остальные за Фамилию, это даст нам
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;
}
Простой, простой код для преобразования чего-то вроде Цветы, Любовь в Любовь Цветы (это работает с очень сложными именами, такими как Уильямс Джонс, Руперт Джон ) :
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}");
Вы можете попробовать перенести эту PHP-библиотеку https://github.com/joshfraser/PHP-Name-Parser/blob/master/parser.php