32

私はこれについていくらかの助けが必要です、私はフルネームの文字列を持っています、そして私がする必要があるのは別々であり、このフルネームの文字列をファーストネームとラストネームとして別々に使用します。

4

18 に答える 18

51

これは、名と名前があることが確実な場合に機能します。

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)が邪魔になるかもしれないと述べました。

于 2011-07-08T19:00:24.153 に答える
16

スペースを使用して解析を試みることはできますが、機能しません。例:

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

しかし、それは大量のユーザー入力で失敗します。彼が2つの名前を持っている場合はどうでしょうか。「フアンパブロペレス」。

名前は複雑なものであるため、特定の文字列の最初と最後の名前がどの部分であるかを常に知ることはできません。

編集

string.Splitメソッドを使用して姓を抽出しないでください。一部の姓は、2つ以上の単語で構成されています。たとえば、私の姓の友人は「ポンセデレオン」です。

于 2011-07-08T19:02:48.980 に答える
14

このソリューションは、複数の単語を含む姓を持つ人々に有効です。最初の単語を名として扱い、それ以外はすべて最後の名前のままにします。

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"
于 2016-04-27T22:55:02.957 に答える
9

次のような方法のこのバージョン(MSDN)を使用できます。Split

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

この場合、にsplit[0]なります。もう一つの例:Johnsplit[1]Deo

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

この場合、にsplit[0]なります。Johnsplit[1]Wesley Doe

の長さがsplit2を超えないことに注意してください

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

この回答がこのページに役立つ何かを追加することを願っています。

于 2017-06-29T05:31:32.077 に答える
8

試す:

  string fullName = "The mask lol"; 
    string[] names = fullName.Split(' '); 
    string name = names.First();
    string lasName = names.Last(); 
于 2011-07-08T19:02:12.393 に答える
4

正規表現を使用して、名前と名前がどのように見えるかを厳密に定義することをお勧めします。

于 2011-07-08T19:04:33.327 に答える
4

nugetでの名前の解析/分割にはいくつかの実装があります。NameParserSharpリポジトリに飛び込むと、2つの部分的なクラスを組み合わせて、独自のライブラリにコピーアンドペーストすることもできます。

NameParserSharp

Nugetの詳細

于 2016-02-04T14:43:24.773 に答える
3

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
  }
于 2020-07-01T05:03:13.720 に答える
1

これが私のプロジェクトで使用している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;
}
于 2015-02-11T12:02:13.633 に答える
0

これは、 string.Split()を呼び出して、分割文字として単一のスペースを渡すのと同じくらい簡単ですか?それとも、ここで何かトリッキーなことが起こっていますか?(後者の場合は、質問をより多くの情報で更新してください。)

于 2011-07-08T19:01:06.740 に答える
0

基本的なユースケースでは、''または'で簡単に分割できますが、名前の種類が異なるため、これが常に機能するとは限りません。

于 2011-07-08T19:03:56.367 に答える
0

このPHPライブラリの移植を試みることができますhttps://github.com/joshfraser/PHP-Name-Parser/blob/master/parser.php

于 2015-08-26T11:39:04.273 に答える
0

したがって、最初のスペースを名前として、残りを名前として使用すると、これにより、

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;
}
于 2017-01-12T12:38:29.700 に答える
0

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}");
于 2019-01-05T23:03:12.163 に答える
0

これには複数の方法があります。私の特定の状況は、以下のようなコード例で解決されます。

例えば


ユーザー名にスペースが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
   }
于 2020-02-20T12:57:47.483 に答える
0

名前を表す値オブジェクトを作成して、アプリケーションで使用できます

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";
于 2021-02-24T20:33:15.067 に答える
0

これは、多くのアプリケーションで使用されるこれに対する私の解決策です。

 string fullName = "John De Silva";
 string[] names = fullName.Split(" ");
 string firstName = names.First(); // John
 string lastName = string.Join(" ", names.Skip(1).ToArray()); // De Silva

楽しみ !

于 2021-06-14T14:42:21.890 に答える
0
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
于 2022-02-17T19:00:13.323 に答える