如何获得第一,并用空格分隔字符串的最后一个部分

问题描述:

如果我有一个名称由用空格隔开一个以上的部分,我想:如何获得第一,并用空格分隔字符串的最后一个部分

the first name + " " + the last name. 

有什么方法来做到这一点。

  • 没有规则,除了空格分隔的名称。

  • 有任何数量的部件。

例子:

john depp lennon 

要:

john lennon 

string sString = "john depp lennon"; 
string[] sArray = sString.Split(' '); 

string sStartEnd = sArray[0] + " " + sArray[sArray.Count()-1]; // "john lennon" 
+1

这取决于你想返回,如果只有一个名字..像什么“波诺..这将retrun‘波诺波诺’..还有,我只是用sArray.Length-1 – 2011-12-25 11:58:05

+0

唯一的问题复合名称!!!!它以最后一部分作为姓。 – 2011-12-25 15:32:16

string str = "john depp lennon";  
string[] data = str.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
string result = string.Format("{0} {1}", data.First(), data.Last()); 
+0

如果字符串不完全具有3个部分,则这不起作用。 – svick 2011-12-25 11:59:23

+0

@svick可能是你错过了,他说没有规矩,任何方式更新我的答案,谢谢:) – 2011-12-25 12:02:03

+1

我认为“无规则”并不意味着“结果可能是什么”,但像“输入可以是任何东西” 。 – svick 2011-12-25 12:07:05

既然你在标签中提到LINQ,我给你的是,进入跳过验证一部分(只有“Johm”)或者什么也不输入,那将是:

确保您有:

using System.Linq; 

然后:

var nameParts = name.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
var fullName = string.Format("{0} {1}", nameParts.First(), nameParts.Last()); 

Thise将为快乐路径做的工作


如果我们要检查边缘的情况下,我们可以添加额外的检查:

static string GetName(string nameEntry) 
{ 
    // assuming .NET 4, or use string.IsNullOrEmpty(), 
    // as we are protected later from white space-only text 
    if(string.IsNullOrWhiteSpace(nameEntry)) 
     return string.Empty; // Or throw error. Your choice 

    var nameParts = nameEntry.Split(new[] { ' ' }, 
             StringSplitOptions.RemoveEmptyEntries); 
    if(!nameParts.Any()) return string.Empty(); // Or throw error. Your choice 

    if(nameParts.Length == 1) 
     return nameParts.First(); 

    var fullName = string.Format("{0} {1}", nameParts.First(), nameParts.Last()); 
    return fullName; 
}