我有以下名单:
List<string> names = new List<string>();
names.Add("Tom Example");
names.Add("Ron Example");
names.Add("Peter Pavel Example");
names.Add("Pavel Ron Tom Example");
对于list的每个元素,我希望将字符串拆分为更小的字符串:
string firstName;
string firstInitial;
string lastName;
string lastInitial;
string secondName;
string secondInitial;
我想在循环中做这个方法,因为我想在那个小字符串上做一些事情。如果我在字符串中有三个名字和姓氏,我只想有名字和姓氏。进行清关:
对于列表中的最后一个元素,我希望得到这样的结果:
string firstName == Pavel;
string firstInitial == P;
string lastName == Example;
string lastInitial == E;
string secondName == Ron;
string secondInitial == R;
我不知道如何正确地执行这个问题。有什么想法吗?
发布于 2014-09-02 10:12:33
我为你自己准备了以下解决方案:
public enum NameOptions
{
FirstName = 1,
MiddleName = 2,
LastName = 4
};
然后扩展:
public static string SafeTokenPosition(this string @string, int index)
{
if (string.IsNullOrEmpty(@string))
{
return string.Empty;
}
var tokens = @string.Split(new[] { " " },
StringSplitOptions.RemoveEmptyEntries);
return index >= tokens.Length ? string.Empty : tokens[index];
}
private static string ResolveLastName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return string.Empty;
}
var tokens = name.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
switch (tokens.Length)
{
case 2:
return tokens[1];
case 3:
return tokens[2];
default:
return string.Empty;
}
}
private static string ResolveMiddleName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return string.Empty;
}
var tokens = name.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
switch (tokens.Length)
{
// ex. John Pablo Kowalsky
case 3:
return tokens[1];
default:
return string.Empty;
}
}
private static string ResolveFirstName(string name)
{
return name.SafeTokenPosition(0);
}
和最后延期:
public static string ExtractName(this string @string, NameOptions nameOptions)
{
switch (nameOptions)
{
case NameOptions.FirstName:
return ResolveFirstName(@string);
case NameOptions.MiddleName:
return ResolveMiddleName(@string);
case NameOptions.LastName:
return ResolveLastName(@string);
default:
throw new NotSupportedException("Name " + nameOptions + " is not supported.");
}
}
用法:
var firstName = "John Sample".ExtractName(NameOptions.FirstName);
它应该很容易扩展到处理初始字母和两秒钟的名字.
https://stackoverflow.com/questions/25620752
复制相似问题