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.
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.
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".
Essayez:
string fullName = "The mask lol";
string[] names = fullName.Split(' ');
string name = names.First();
string lasName = names.Last();
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"
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.
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.
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.
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;
}
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.)
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.
Vous pouvez essayer de porter cette lib PHP https://github.com/joshfraser/PHP-Name-Parser/blob/master/parser.php
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;
}