当前位置:编程学习 > C#/ASP.NET >>

新手请教 提取邮箱用户名和域名 问题

按照网上写的程序发生问题,代码如下:
  static void Main(string[] args)
         {
 
            //从Email中提出用户名和域名:abc@163.com
             string email = Console.ReadLine();
             int atIndex = email.IndexOf('@');//atIndex是指域名的长度,int型
             string username = email.Substring(0,atIndex);//提取用户名
             string 域名 = email.Substring(atIndex+1);//提取域名
             Console.WriteLine(username);
             Console.WriteLine(域名);
             Console.ReadKey();
         }

显示域名时带着.com  比如123@321.com,程序输出为
123@321.com
123
321.com

后来根据自己修改,VS2010报错,求前辈们分析下问题,并指点下正确答案

        static void Main(string[] args)
        {

            //从Email中提出用户名和域名:abc@163.com
            string email = Console.ReadLine();
            int e = email.Length;//输入email的总长度
            int atIndex = email.IndexOf('@');//atIndex是指域名的长度,int型
            int a = email.IndexOf('.');//.com长度
            string username = email.Substring(0, atIndex);//提取用户名
            string 域名 = email.Substring(e - a - (atIndex+1));//提取域名(email总长度-.com长度-(用户名+@的长度))
            Console.WriteLine(username);
            Console.WriteLine(域名);
            Console.ReadKey();
        }


以上程序输出时出现两个问题。一是如果输入123@321.com 输出则为
123@321.com
123
123@321.com

二是如果输入长点的email地址如12345@54321.com则会报错

第一次发帖,有什么问题请见谅 --------------------编程问答-------------------- 第二个问题是指string 域名 = email.Substring(e - a - (atIndex+1))的值小于0了么?
可我觉得没有小于0啊…… --------------------编程问答--------------------
引用楼主 lhp3736 的回复:
按照网上写的程序发生问题,代码如下:
  static void Main(string[] args)
  {
 
  //从Email中提出用户名和域名:abc@163.com
  string email = Console.ReadLine();
  int atIndex = email.IndexOf('@');//atIndex是指域名的长度,int型
  string……
你此处计算明算有问题。当email为:abc@163.com时,其length为11,点的索引为7,@索引为3,此时e - a - (atIndex+1))=0,截取时没问题。当email为:12345@54321.com时,其length为15,点的索引为11,@索引为5,此时e - a - (atIndex+1))=-2,这时截取就有问题了。
而且你无非是想得到email中的域名,就按照你从网上弄的那种不就是可以的吗,干吗你还要搞的那么麻烦?而且你那截取方式明显是有问题的。多看看字符串函数吧……
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,