问题描述
按照网上写的程序发生问题,代码如下:staticvoidMain(string[]args){//从Email中提出用户名和域名:abc@163.comstringemail=Console.ReadLine();intatIndex=email.IndexOf('@');//atIndex是指域名的长度,int型stringusername=email.Substring(0,atIndex);//提取用户名string域名=email.Substring(atIndex+1);//提取域名Console.WriteLine(username);Console.WriteLine(域名);Console.ReadKey();}显示域名时带着.com比如123@321.com,程序输出为123@321.com123321.com后来根据自己修改,VS2010报错,求前辈们分析下问题,并指点下正确答案staticvoidMain(string[]args){//从Email中提出用户名和域名:abc@163.comstringemail=Console.ReadLine();inte=email.Length;//输入email的总长度intatIndex=email.IndexOf('@');//atIndex是指域名的长度,int型inta=email.IndexOf('.');//.com长度stringusername=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.com123123@321.com二是如果输入长点的email地址如12345@54321.com则会报错第一次发帖,有什么问题请见谅
解决方案
解决方案二:
第二个问题是指string域名=email.Substring(e-a-(atIndex+1))的值小于0了么?可我觉得没有小于0啊……
解决方案三:
引用楼主lhp3736的回复:
按照网上写的程序发生问题,代码如下:staticvoidMain(string[]args){//从Email中提出用户名和域名:abc@163.comstringemail=Console.ReadLine();intatIndex=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中的域名,就按照你从网上弄的那种不就是可以的吗,干吗你还要搞的那么麻烦?而且你那截取方式明显是有问题的。多看看字符串函数吧……