私はこれについていくらかの助けが必要です、私はフルネームの文字列を持っています、そして私がする必要があるのは別々であり、このフルネームの文字列をファーストネームとラストネームとして別々に使用します。
18 に答える
これは、名と名前があることが確実な場合に機能します。
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が示すように、一部の名前は「LuisdaSilva」のような複合名であることに注意する必要があります。
これは、解決するのが簡単な問題ではありません。一部の前置詞(フランス語、スペイン語、ポルトガル語など)は、名前の一部です。そのため、@ John Saundersは「どの言語ですか?」と尋ねました。ジョンはまた、接頭辞(Mr.、Mrs.)と接尾辞(Jr.、III、MD)が邪魔になるかもしれないと述べました。
スペースを使用して解析を試みることはできますが、機能しません。例:
var fullName = "Juan Perez";
var name = fullName.Substring(0, fullName.IndexOf(" "));
var lastName = fullName.Substring(fullName.IndexOf(" ") + 1);
しかし、それは大量のユーザー入力で失敗します。彼が2つの名前を持っている場合はどうでしょうか。「フアンパブロペレス」。
名前は複雑なものであるため、特定の文字列の最初と最後の名前がどの部分であるかを常に知ることはできません。
編集
string.Splitメソッドを使用して姓を抽出しないでください。一部の姓は、2つ以上の単語で構成されています。たとえば、私の姓の友人は「ポンセデレオン」です。
このソリューションは、複数の単語を含む姓を持つ人々に有効です。最初の単語を名として扱い、それ以外はすべて最後の名前のままにします。
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;
}
たとえば、Brian De Palmaを上記の関数に渡すと、「De Palma、Brian」が返されます。
getLastNameFirst("Brian De Palma");
//returns "De Palma, Brian"
次のような方法のこのバージョン(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];
}
この回答がこのページに役立つ何かを追加することを願っています。
試す:
string fullName = "The mask lol";
string[] names = fullName.Split(' ');
string name = names.First();
string lasName = names.Last();
正規表現を使用して、名前と名前がどのように見えるかを厳密に定義することをお勧めします。
nugetでの名前の解析/分割にはいくつかの実装があります。NameParserSharpリポジトリに飛び込むと、2つの部分的なクラスを組み合わせて、独自のライブラリにコピーアンドペーストすることもできます。
name="トニースタークは死んでいる";
get_first_name(String name) {
var names = name.split(' ');
String first_name= "";
for (int i = 0; i != names.length; i++) {
if (i != names.length - 1)
{
if (i == 0) {
first_name= first_name+ names[i];
} else {
first_name= first_name+ " " + names[i];
}
}
}
return first_name; // Tony Stark is
}
get_last_name(String name) {
var names = name.split(' ');
return names[names.length - 1].toString(); // dead
}
これが私のプロジェクトで使用しているc#コードの一部です。最後の単語を名前として返し、残りを名前として返します。
出力:
Mary Isobel Catherine O’Brien
-------------------------
Name : Mary Isobel Catherine , Surname : O’Brien
PSミドルネームはありません、ごめんなさい。
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;
}
これは、 string.Split()を呼び出して、分割文字として単一のスペースを渡すのと同じくらい簡単ですか?それとも、ここで何かトリッキーなことが起こっていますか?(後者の場合は、質問をより多くの情報で更新してください。)
基本的なユースケースでは、''または'で簡単に分割できますが、名前の種類が異なるため、これが常に機能するとは限りません。
このPHPライブラリの移植を試みることができますhttps://github.com/joshfraser/PHP-Name-Parser/blob/master/parser.php
したがって、最初のスペースを名前として、残りを名前として使用すると、これにより、
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;
}
Flowers、Love to Love Flowersなどを変換するための簡単でシンプルなコード(これは、 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() + " "}");
}
出力:愛の花
逆に。花に変換された愛の花、愛:
string fullname = "Love Flowers";
int indexOfTheSpace = fullname.IndexOf(' ');
string firstname = fullname.Substring(0, indexOfTheSpace);
string lastname = fullname.Substring(indexOfTheSpace + 1);
WriteLine($"{lastname}, {firstname}");
これには複数の方法があります。私の特定の状況は、以下のようなコード例で解決されます。
例えば
ユーザー名にスペースが1つしかない場合。
int idx = fullName.IndexOf(' '); //This customer name : Osman Veli
ユーザー名に複数のスペースがある場合。
if (fullName.Count(Char.IsWhiteSpace) > 1)
{
idx = fullName.LastIndexOf(' '); //This customer name : Osman Veli Sağlam
}
if (idx != -1)
{
// Osman Veli Sağlam
firstName = fullName.Substring(0, idx); // FirstName: Osman Veli
lastName = fullName.Substring(idx + 1); // LastName : Sağlam
}
名前を表す値オブジェクトを作成して、アプリケーションで使用できます
public class Name
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string FullName { get; }
public Name(string name)
{
if (string.IsNullOrEmpty(name))
return;
FullName = name;
LoadFirstAndLastName();
}
private void LoadFirstAndLastName()
{
var names = FullName.Trim().Split(" ", 2);
FirstName = names.First();
if (names.Count() > 1)
LastName = names.Last();
}
public override string ToString() => FullName;
//Enables implicit set (Name name = "Rafael Silva")
public static implicit operator Name(string name) => new Name(name);
}
使用法:
Name name = "Jhon Doe"; //FirstName = Jhon - LastName = Doe
Name name = new Name("Jhon Doe"); //FirstName = Jhon - LastName = Doe
Name name = new Name("Rafael Cristiano da Silva"); //FirstName = Rafael - LastName = Cristiano da Silva
//On class property
public Name Name {get; set; } = "Jhon Doe";
これは、多くのアプリケーションで使用されるこれに対する私の解決策です。
string fullName = "John De Silva";
string[] names = fullName.Split(" ");
string firstName = names.First(); // John
string lastName = string.Join(" ", names.Skip(1).ToArray()); // De Silva
楽しみ !
Sub SplitFullName(Full_Name As String)
Dim names = Full_Name.Split(" ")
Dim FirstName As String = ""
Dim MiddletName As String = ""
Dim LastName As String = ""
If names.Count = 0 Then
FirstName = ""
MiddletName = ""
LastName = ""
ElseIf names.Count = 1 Then
FirstName = names(0)
ElseIf names.Count = 2 Then
FirstName = names(0)
LastName = names(1)
Else
FirstName = names(0)
For i = 1 To names.Count - 2
MiddletName += " " & names(i)
Next
LastName = names(names.Count - 1)
End If
MsgBox("The first name is: " & FirstName & "; The middle name is: " & MiddletName & "; The last name is: " & LastName)
End Sub