J'ai besoin d'aide avec ceci, j'ai une chaîne de nom complet et ce que je dois faire est de séparer et utiliser cette chaîne de nom complet en tant que prénom et nom de famille séparément.
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 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
Mettre à jour
Bien entendu, il s’agit d’une vision plutôt simplifiée du problème. L'objectif de ma réponse est d'expliquer comment fonctionne string.Split()
. Cependant, vous devez garder à l'esprit que certains noms de famille sont des noms composites, comme "Luis da Silva", comme l'a noté @AlbertEin.
C'est loin d'être un problème simple à résoudre. Certaines 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 gêner.
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’informations d’utilisateur. Qu'en est-il s’il a deux noms? "Juan Pablo Perez".
Les noms sont des choses compliquées, il est donc impossible de toujours savoir quelle partie est le prénom et le nom d'une chaîne donnée.
MODIFIER
Vous ne devez pas utiliser la méthode string.Split pour extraire le nom de famille. Certains noms de famille sont composés d'au moins deux mots. Par exemple, le nom d'un de mes amis est "Ponce de Leon".
Cette solution fonctionnera pour les personnes dont le nom de famille comporte plusieurs mots. Traite le premier mot comme prénom et laisse tout le reste comme 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 à la fonction ci-dessus renvoie "De Palma, Brian"
getLastNameFirst("Brian De Palma");
//returns "De Palma, Brian"
Essayer:
string fullName = "The mask lol";
string[] names = fullName.Split(' ');
string name = names.First();
string lasName = names.Last();
Vous pouvez utiliser cette version (MSDN) de la méthode Split
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
ne doit jamais dépasser 2
Donc, avec le code suivant, vous pouvez obtenir FirstName
et LastName
agréablement:
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.
Il existe plusieurs implémentations d’analyser/diviser les noms sur nuget. Si vous plongez dans le référentiel NameParserSharp, vous pouvez également combiner deux classes partielles et les copier/coller dans votre propre bibliothèque.
Je recommanderais d’utiliser un Regex pour définir de manière rigoureuse l’apparence de votre prénom et de votre nom.
Voici un morceau de code c # que j'utilise dans mes projets. Il retourne 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 qui se passe ici? (Si ce dernier cas, veuillez mettre à jour votre question avec plus d’informations.)
pour les cas d'utilisation élémentaires, il est facile de scinder simplement 'ou', cependant, en raison de la diversité des noms comportant des éléments différents, cela ne fonctionnera pas toujours.
Vous pouvez essayer de porter ce PHP lib https://github.com/joshfraser/PHP-Name-Parser/blob/master/parser.php
Donc, si vous prenez le premier espace comme nom et que vous vous reposez comme nom de famille, cela nous donnera
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;
}
Un code simple et facile pour transformer quelque chose comme Flowers, Love à Love Flowers (cela fonctionne avec des noms très complexes comme 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() + " "}");
}
sortie : Love Flowers
L'inverse. Amour Fleurs converties en Fleurs, Amour:
string fullname = "Love Flowers";
int indexOfTheSpace = fullname.IndexOf(' ');
string firstname = fullname.Substring(0, indexOfTheSpace);
string lastname = fullname.Substring(indexOfTheSpace + 1);
WriteLine($"{lastname}, {firstname}");