Comment séparer la chaîne de nom complet en firstname et LastName string?

J'ai besoin d'aide avec cela, j'ai une chaîne fullname et ce que je dois faire est de séparer et d'utiliser cette chaîne fullname comme firstname et lastname séparément.

22
demandé sur Adrian Carneiro 2011-07-08 22:57:57

12 réponses

Cela fonctionnera si vous êtes sûr d'avoir un prénom et un nom de famille.

string fullName = "Adrian Rules";
var names = fullName.Split(' ');
string firstName = names[0];
string lastName = names[1];

Assurez-vous de vérifier pour la longueur de 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

Mise à Jour

Bien sûr, c'est une vue plutôt simplifiée sur le problème. L'objectif de ma réponse est d'expliquer comment string.Split() œuvres. Cependant, vous devez garder à l'esprit que certains noms de famille sont des noms composites, comme "Luis da Silva", comme indiqué par @AlbertEin.

C'est loin d'être un problème simple à résoudre. Quelque les prépositions (en français, espagnol, portugais, etc.) font partie du nom de famille. C'est pourquoi @ John Saunders a demandé " quelle langue?". John a également noté que les préfixes (M., Mme) et les suffixes (Jr., III, M. D.) pourraient se mettre en travers de la route.

35
répondu Adrian Carneiro 2011-07-08 19:17:17

Vous pouvez essayer de l'analyser en utilisant des espaces mais cela ne fonctionnera pas, Exemple:

var fullName = "Juan Perez";
var name = fullName.Substring(0, fullName.IndexOf(" "));
var lastName = fullName.Substring(fullName.IndexOf(" ") + 1);

Mais cela échouerait avec une tonne d'entrée utilisateur, qu'en est-il s'il a deux noms? "Juan Pablo Perez".

Les noms sont des choses compliquées, donc, il n'est pas possible de toujours savoir quelle partie est le prénom et le nom dans une chaîne donnée.

Modifier

Vous ne devriez pas utiliser de chaîne.Méthode Split pour extraire le nom de famille, certains noms de famille sont composés de deux mots ou plus, comme exemple, le nom de famille d'un de mes amis est "Ponce De Leon".

10
répondu albertein 2011-07-08 19:08:11

Essayez:

  string fullName = "The mask lol"; 
    string[] names = fullName.Split(' '); 
    string name = names.First();
    string lasName = names.Last(); 
8
répondu The Mask 2013-12-11 21:19:05

Cette solution fonctionnera pour les personnes qui ont un nom de famille qui a plus d'un mot. Traitez le premier mot comme le prénom et laissez tout le reste comme le nom de famille.

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;            
} 

Par exemple, passer Brian De Palma dans la fonction ci-dessus renverra "De Palma, Brian"

getLastNameFirst("Brian De Palma");
//returns "De Palma, Brian"
7
répondu WiredIn 2016-04-27 22:55:02

Il existe plusieurs implémentations d'analyse/fractionnement de noms chez nuget. Si vous plongez dans le référentiel NameParserSharp, vous pouvez également combiner deux classes partielles et copier-coller dans votre propre bibliothèque.

NameParserSharp

Plus à Nuget

3
répondu James White 2016-02-04 14:43:24

Vous pouvez utiliser cette version (MSDN) de Split méthode comme suit:

var testcase = "John Doe";
var split = testcase.Split(new char[] { ' ' }, 2);

Dans ce cas, split[0] sera John et split[1] sera Deo. un autre exemple:

var testcase = "John Wesley Doe";
var split = testcase.Split(new char[] { ' ' }, 2);

Dans ce cas, split[0] sera John et split[1] sera Wesley Doe.

Notez que la longueur de split jamais plus de 2

Donc, avec le code suivant, vous pouvez obtenir FirstName et LastName joliment:

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];
}

J'espère que cette réponse ajoutera quelque chose d'utile à cette page.

3
répondu Mehdi Dehghani 2017-06-29 05:31:32

Je recommande d'utiliser un Regex pour définir rigoureusement à quoi ressemblent vos noms et prénoms.

2
répondu Kongress 2011-07-08 19:04:33

Voici un morceau de code c# que j'utilise sur mes projets. Il renvoie le dernier mot comme nom de famille et le reste comme nom.

Violon

Sortie:

Mary Isobel Catherine O’Brien
-------------------------
Name : Mary Isobel Catherine , Surname : O’Brien

P.S. pas de deuxième prénom, désolé.

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;
}
1
répondu Bonus Kun 2015-02-11 12:02:13

Est-ce aussi simple que d'appeler string.Split () , en passant un seul espace comme caractère divisé? Ou y a-t-il quelque chose de plus délicat ici? (Si ce dernier, veuillez mettre à jour votre question avec plus d'informations.)

0
répondu mikemanne 2011-07-08 19:01:06

Pour les cas d'utilisation de base, il est facile de simplement diviser sur ''ou', ' Cependant, en raison de la variété des noms avec des choses différentes en eux, cela ne fonctionnera pas toujours.

0
répondu m4tt1mus 2011-07-08 19:03:56
0
répondu stokito 2015-08-26 11:39:04

Donc, si vous prenez le premier espace comme nom et le repos comme nom de famille, cela nous donnerait

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
répondu Ggalla1779 2017-07-04 14:11:08