Как разделить строку полного имени на строку имени и фамилии?

Мне нужна помощь с этим, у меня есть строка полного имени, и все, что мне нужно сделать, это разделить и использовать эту строку полного имени как имя и фамилию отдельно.

24
задан Adrian Carneiro 9 July 2011 в 18:43
поделиться

7 ответов

Это сработает, если вы уверены, что у вас есть имя и фамилия.

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.) могут мешать.

39
ответ дан 28 November 2019 в 22:19
поделиться

Вы можете использовать эту версию (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];
}

Надеюсь, этот ответ добавит что-то полезное на эту страницу.

4
ответ дан 28 November 2019 в 22:19
поделиться

Существует несколько реализаций разбора / разделения имен в nuget. Если вы погрузитесь в репозиторий NameParserSharp, вы также можете просто объединить два частичных класса и копировать & amp; вставьте в свою собственную библиотеку.

NameParserSharp

Еще на Nuget

3
ответ дан 28 November 2019 в 22:19
поделиться

Это так же просто, как вызывать string.Split () , передавая один пробел в качестве символа разделения? Или здесь происходит что-то более хитрое? (Если последнее, пожалуйста, обновите ваш вопрос с более подробной информацией.)

0
ответ дан 28 November 2019 в 22:19
поделиться

Так что, если вы возьмете Первое пространство за Имя, а остальные за Фамилию, это даст нам

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;
}
0
ответ дан 28 November 2019 в 22:19
поделиться

Простой, простой код для преобразования чего-то вроде Цветы, Любовь в Любовь Цветы (это работает с очень сложными именами, такими как Уильямс Джонс, Руперт Джон ) :

        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}");
0
ответ дан 28 November 2019 в 22:19
поделиться

Вы можете попробовать перенести эту PHP-библиотеку https://github.com/joshfraser/PHP-Name-Parser/blob/master/parser.php

0
ответ дан 28 November 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: