我已经能够分割名字和姓氏了。但我遇到的问题是,如果有人决定输入中间名或中间名?有谁知道我该怎么做呢?
这是我到目前为止的代码:
//Name Split
var fullname = strTextBox;
var names = fullname.Split(' ');
label3.Text = names[0];
label5.Text = names[1] + " " + names[2];
如果此人输入中间名字和姓氏,则此代码有效。但是,如果用户只输入名字和姓氏,names[2]
会给我错误,因为它无法找到另一个分区。
我会说我已经花了至少10个小时试图找出一个条件让这个工作,但还没有得到它。
这是我尝试过的众多条件之一:
//Name Split
var fullname = strTextBox;
var names = fullname.Split(' ');
if (fullname.Contains (> 1 (' '))
{
label3.Text = names[0]; // first
label5.Text = names[1] + " " + names[2]; // middle initial
}
else
{
label3.Text = names[0];
label5.Text = names[1];
}
答案 0 :(得分:1)
就我个人而言,我会为每个我想收集的数据单独设置一个文本框。
主要原因是您无法准确预测用户将在“全名”文本框中输入的内容。变化太多了。
考虑:
Jamie Dixon
Jamie O Dixon
Dixon, Jamie O
Dixon, Jamie
Jamie O P J Dixon
虽然组合数量有限,但您无法真正预测的是用户输入详细信息的次数和顺序。
答案 1 :(得分:1)
这不是一个很好的解决方案,你会把它分成两个文本框,但如果你想要这会产生预期的效果:
var fullname = strTextBox;
var names = fullname.Split(' ');
if(names.Count()<2)
{
// throw an error here, because user did not enter first + lastname
}
label3.Text = names[0];
label5.Text = (names.Count() > 2 ? names[1] + " " + names[2] : names[1]);
答案 2 :(得分:0)
试试这个:
label5.Text = string.Format("{0} {1}", (names.Length == 2 ? "" : names[1]),
names.Last()).Trim();
答案 3 :(得分:0)
试试这个。这将有助于你最后的名字。
//string fullname = "";
//string fullname = "first";
//string fullname = "first last";
string fullname = "first middle last";
//string fullname = "first middle last extra-last";
string[] names = fullname.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
if (names.Length > 0)
{
string firstName = names[0];
string lastNameWithInitial = string.Join(" ", names, 1, names.Length - 1);
}