从名称字符串c#

时间:2016-04-07 04:47:05

标签: c#

我正在尝试编写解析按钮 当我输入skw2030@gmail.com电子邮件地址时 messagbox弹出 用户名:skw2030 域名:gmail.com

因此,我使用代码删除“@”但是当我点击解析按钮时, 它总是删除用户名的第一个字母,例如kw2030 ...... 我该怎么办?

private void btnParse_Click(object sender, EventArgs e)
    {
        string email = Convert.ToString(txtEmail.Text);
        email = email.Trim();
        if (email.Contains("@"))
            email = email.Remove(0, 1);
        int IndexDomain = email.IndexOf("@") + 1;

        string UserName = email.Substring(0 , IndexDomain - 1);
        string DomainName = email.Substring(IndexDomain);

        MessageBox.Show("User name:"  +  UserName.ToString() + "\n"
          + "Domain Name:" + DomainName.ToString(), "Parsed String");                   

    }

5 个答案:

答案 0 :(得分:1)

这可能会对您有所帮助:

很少有建议:

  • 来自txtEmail的输入已经是您不需要的字符串 将其转换为字符串。
  • 如果给定的邮件ID不是"@",那么最好显示警告,输入的邮件ID无效。
  • 不需要删除特定字符;根据字符将字符串拆分为2。这将为您提供所需的结果。
  • String.Remove将接受两个参数,第一个表示起始索引,第二个表示字符数:因此,如果要执行此删除操作,则需要执行此操作(但这不是必要的):

    int IndexDomain = email.IndexOf("@");
    email = email.Remove(IndexDomain, 1); 
    
  • 另一个更好的选择是使用占位符格式化输出消息;

现在考虑一下代码段:

string email = txtEmail.Text.Trim();; // "skw2030@gmail.com"      
if (email.Contains("@"))
{
   string[] addressElements = email.Split('@');
   MessageBox.Show(String.Format("User name: {0} \n Domain Name: {1}",addressElements[0],addressElements[1]), "Parsed String");
}
else
MessageBox.Show("invalid Mail");

答案 1 :(得分:1)

您可以使用string的split方法。像那样:

string email = "abc@example.com";
string[] arr = email.Split('@');

它会给你2个元素数组,第一个是名字(abc),第二个是域名(example.com)。

顺便说一句,在你的情况下,这就是问题所在:

email = email.Remove(0, 1);

答案 2 :(得分:1)

我猜你只想将字符串分成两部分,对吧?

在电子邮件中,@左边的所有内容都是用户名,右边是域名。要将电子邮件拆分为两部分,请使用Split()方法:

string email = "abc@def.com";
string[] twoParts = email.Split('@');

现在数组twoParts包含两个元素 - " abc"和" def.com"那就是你想要的,对吧?

string username = twoParts[0];
string domainName = twoParts[1];

但是等等!如果电子邮件无效怎么办?要检查电子邮件是否无效,您只需检查数组的长度:

if (twoParts.Length != 2) {
    // show error message
}

当然,在获得用户名和域名之前,您应该检查一下。

答案 3 :(得分:0)

以下这一行是从您的电子邮件字符串的索引0中删除1个字符。

email = email.Remove(0, 1);

If (email.Contains("@"))可用于确保用户输入了有效的电子邮件来处理抛出的异常。你应该这样修改你的代码:

private void btnParse_Click(object sender, EventArgs e)
{
    string email = Convert.ToString(txtEmail.Text);
    email = email.Trim();
    if (email.Contains("@"))
    {
        //email = email.Remove(0, 1); <--- Remove this
        int IndexDomain = email.IndexOf("@") + 1;

        string UserName = email.Substring(0 , IndexDomain - 1);
        string DomainName = email.Substring(IndexDomain);

        MessageBox.Show("User name:"  +  UserName.ToString() + "\n"
          + "Domain Name:" + DomainName.ToString(), "Parsed String");
    }
    else
    {
        //Tell users that the email is invalid.
        //For example: MessageBox.Show("Invalid Email");
    }
}

无论如何,和其他人一样,你一定要考虑String.Split。基本上它用户定义的字符分隔字符串。所以如果你这样做:

string emailArray = email.Split('@');

您的UserNameDomainName现在只是:

string UserName = emailArray[0];
string DomainName = emailArray[1];

更简单吧?

答案 4 :(得分:0)

您可以对字符串使用子字符串方法。像那样:

private void btnParse_Click(object sender, EventArgs e)
{
     string email = txtEmail.Text.Trim(); // your email address      
     if (email.Contains("@"))
     {
         var userName = email.Substring(0, email.IndexOf('@'));
         var domainName = email.Substring(email.IndexOf('@') + 1, email.Length - email.IndexOf('@') - 1);
         MessageBox.Show("User name:"  +  userName + "\n" + "Domain Name:" + domainName, "Parsed String"); 
     }
     else
     {
         MessageBox.Show("Invalid email");
     }
}