将文本框中的文本拆分为另一个表单上的标签

时间:2011-08-15 16:13:00

标签: c#

我已经能够分割名字和姓氏了。但我遇到的问题是,如果有人决定输入中间名或中间名?有谁知道我该怎么做呢?

这是我到目前为止的代码:

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

4 个答案:

答案 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);
        }