在最后一个空格后分割字符串

4
我正在制作一个同步到数据库的程序,它会接收姓名并将其拆分成两个字符串,以最后一个“空格”为分界。例如将名称“John Doe Jackson”拆分为john Doe和Jackson。目前我已经获得了最后一个名字:
public static string getLastName(string fullname)
{
    string lastName = fullname.Split(' ').LastOrDefault();
}

如何返回字符串的其余部分,这样我就有了类似下面的内容:

名字:约翰·多

姓氏:杰克逊


编辑:通过以下方式完成,虽然不是最清晰的方法,但它能达到预期的效果!
     public static string getLastName(string fullname)
    {
        string lastName = fullname.Split(' ').LastOrDefault();
        Console.WriteLine(lastName);
        return lastName;
    }

    public static string getFirstName(string fullname)
    {
        var parts = fullname.Split(' ');
        var lastName = parts.LastOrDefault();
        var firstName = string.Join(" ", parts.Take(parts.Length - 1));
        return firstName;
    }
5个回答

13

您可以尝试类似以下的做法:

var parts = fullname.Split(' ');
var lastName = parts.LastOrDefault();
var firstName = string.Join(" ",parts.Take(parts.Length-1));

1
在我的代码中使用了这个,但是意识到如果“fullname”中没有空格,“lastName”将包含“fullName”,而“firstName”将为空。同时字符串开头只有一个空格。 - Ricardo stands with Ukraine
1
@Riga 这只适用于字符串格式为“John Doe Jackson”的情况。 它解决了这个问题。 如果fullName中没有空格,则应应用另一种(特定格式的自定义)逻辑。 - Christos
1
非常好的答案。+1 - Arsman Ahmad

5
我会这样做:
var lastSpaceIndex = fullName.LastIndexOf(' ');
var firstName = fullName.Substring(0, lastSpaceIndex);
var lastName = fullName.Substring(lastSpaceIndex+1);

See it in action here


1
你可以使用 string.Join
public static string getFirstName(string fullname)
{
    return string.join(" ",fullname.Split(' ').Take(fullname.Split(' ').Count()-1));

}

1

基于已接受答案的另一个版本,但保护了空字符串和在fullName中没有空格的情况下将输入保留为firstName。

if (string.IsNullOrWhiteSpace(fullName))
     return new KeyValuePair<string, string>(string.Empty, string.Empty);

var parts = fullName.Trim().Split(' ');
if (parts.Length == 1)
     return new KeyValuePair<string, string>(parts[0], string.Empty);

var firstName = string.Join(" ", parts.Take(parts.Length - 1));
var lastName = parts.LastOrDefault();

return new KeyValuePair<string, string>(firstName, lastName);

-1
string name = "John Doe Jackson";
var names = name.Split(' ');
string firstname = names[0] + " " + names[1];
string lastname = names[2];

这种情况在找不到中间名时无法工作。 - Ankur Loriya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接