怎么用JAVA代码实现验证邮箱地址是否合 需要直接贴代码

怎么用JAVA代码实现验证邮箱地址是否合法???不用正则表达式~!比如XXXXXXX@xxxx.。com只能有1个@和一个.;@和。不能在一起;@前只能是1到40个英文字... 怎么用JAVA代码实现验证邮箱地址是否合法???
不用正则表达式~!
比如 XXXXXXX@xxxx.。com
只能有1个@和一个.;
@和 。 不能在一起;
@前只能是1到40个英文字母
@后面不能为汉字,只能是1到40个英文字母或数字;
。后面必须为2到3位长度的英文字母;
需要直接贴源码 要完整代码 1.6的 要编译过 出结果
展开
 我来答
epdc147
2013-11-21 · TA获得超过488个赞
知道小有建树答主
回答量:492
采纳率:0%
帮助的人:330万
展开全部
import java.util.Scanner;

public class Test {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入你要验证的邮箱:");
String mail = sc.next();

//@出现的下标
int atIndex = 0;
//.出现的下标
int fullIndex = 0;

//第一次出现的下标
atIndex = mail.indexOf('@', 0);
//第一次出现的下标
fullIndex = mail.indexOf('.', 0);
//判断@是否出现.后面
if(atIndex >= fullIndex) {
       System.out.println("此邮箱不合法!");
System.exit(0);
}
//判断@是否只有一个
if(mail.indexOf('@', 0) != mail.lastIndexOf('@')) {
System.out.println("此邮箱不合法!");
System.exit(0);
}
//判断.是否只有一个
if(mail.indexOf('.', 0) != mail.lastIndexOf('.')) {
System.out.println("此邮箱不合法!");
System.exit(0);
}
//判断@前面是否是1到40个字符
if(!(atIndex >= 1 && atIndex <= 40)) {
System.out.println("此邮箱不合法!");
System.exit(0);
}
//判断@前面是否为字母
for (int i = 0; i < atIndex; i++) {
if (!((mail.charAt(i) >= 'a' && mail.charAt(i) <= 'z')||(mail.charAt(i) >= 'A' && mail.charAt(i) <= 'Z'))) {
System.out.println("此邮箱不合法!");
System.exit(0);
}
}
//判断@到.是否为只能是1到40个字符
if(!(fullIndex - atIndex - 1 >= 1 && fullIndex - atIndex - 1 <= 40)) {
    System.out.println("此邮箱不合法!");
    System.exit(0);
}
//判断@到.直接的是否为字母或数字
for (int i = atIndex+1; i < fullIndex; i++) {
if (!((mail.charAt(i) >= 'a' && mail.charAt(i) <= 'z')||(mail.charAt(i) >= 'A' && mail.charAt(i) <= 'Z')||(mail.charAt(i)>='0'&&mail.charAt(i)<='9'))) {
System.out.println("此邮箱不合法!");
System.exit(0);
}
}

//判断.后面的是2到3长度的字符
if (!(mail.length() - fullIndex - 1 >= 2 && mail.length() - fullIndex -1 <= 3) ){
System.out.println("此邮箱不合法!");
System.exit(0);
}
//判断.后面的是英文字母
for (int i = fullIndex+1; i < mail.length(); i++) {
if (!((mail.charAt(i) >= 'a' && mail.charAt(i) <= 'z')||(mail.charAt(i) >= 'A' && mail.charAt(i) <= 'Z'))) {
System.out.println("此邮箱不合法!");
System.exit(0);
}
}
System.out.println("此邮箱是合法的!");

}

}
追问
我还提了个问题 问题的名字和这个差不多 只是标题最好少了直接贴出代码  你把你这答案贴到那里 我在那个问题里采纳你这答案  

名字就是
怎么用JAVA代码实现验证邮箱地址是否合
追答
OK,已经贴了
love爱有缘
2013-11-21 · TA获得超过1041个赞
知道小有建树答主
回答量:789
采纳率:0%
帮助的人:697万
展开全部
public class Test{
 public static void main(String[] args){
  Test  t = new Test();
  String email = "test@sina.com" ;
  boolean  isEmail = t.isEmail(email);
  if(isEmail){
   System.out.println(email +" is  a right email!!!");
  }else{
   System.out.println("error");
  }
 }
 public boolean isEmail(String email){
  //正则表达式
  /*     
    String regex = "^[A-Za-z]{1,40}@[A-Za-z0-9]{1,40}\\.[A-Za-z]{2,3}$";
    return email.matches(regex);
   */
  
  //不适用正则
  if(email==null||"".equals(email)) return false ;
  if(!containsOneWord('@',email)||!containsOneWord('.',email)) return false;
  String prefix = email.substring(0,email.indexOf("@"));
  String middle = email.substring(email.indexOf("@")+1,email.indexOf("."));
  String subfix = email.substring(email.indexOf(".")+1);
  System.out.println("prefix="+prefix +"  middle="+middle+"  subfix="+subfix);
  
  if(prefix==null||prefix.length()>40||prefix.length()==0) return false ;
  if(!isAllWords(prefix)) return false ;
  if(middle==null||middle.length()>40||middle.length()==0) return false ;
  if(!isAllWordsAndNo(middle)) return false ;
  if(subfix==null||subfix.length()>3||subfix.length()<2) return false ;
  if(!isAllWords(subfix)) return false ;
  return true ;
 }
 //判断字符串只包含指定的一个字符c
 private boolean containsOneWord(char c , String word){
  char[] array = word.toCharArray();
  int count = 0 ;
  for(Character ch : array){
   if(c == ch) {
    count++;
   }
  }
  return count==1 ;
 }
 //检查一个字符串是否全部是字母
 private boolean isAllWords(String prefix){
  char[] array = prefix.toCharArray();
  for(Character ch : array){
   if(ch<'A' || ch>'z' || (ch<'a' && ch>'Z')) return false ;
  }
  return true;
 }
 //检查一个字符串是否包含字母和数字
 private boolean isAllWordsAndNo(String middle){
  char[] array = middle.toCharArray();
  for(Character ch : array){
   if(ch<'0' || ch > 'z') return false ;
   else if(ch >'9' && ch <'A') return false ;
   else if(ch >'Z' && ch <'a') return false ;
  }
  return true ;
 }
}
追问
能不能说下你的想法 详细点最好
追答
JAVA有一个特性 ,封装!所以首先写代码,尽可能考虑到代码的重用性。
所有首先想到封装 方法
针对邮箱的验证,技术可谓很成熟了,首先,正则表达式是处理字符串的一个很强大的工具,
所以第一个想到的应该是如何用正则表达式进行处理
这个需要你去掌握最基本的正则表达式的写法了!!!

String是Java中最常用的一个类,所以String类中的所有方法,建议楼主最后都掌握。很重要的!

说下思想吧:
一个邮箱,按照你的要求,首先我封装了一个方法,这个方法用来判断是否是合法的邮箱。
当然参数就是1个字符串了
1 邮箱有一个@和. 组成 :会考虑到使用 contains,但是这个方法不能保证重复,只是判断有无,所以不适合。 然后是 indexOf 和lastIndexOf 这两个方法分别返回首次出现的位置和最后一次出现的位置 ,如果两个值相同,说明只有一个字符(昨晚手动写的代码,忘记了lastIndexOf ),
另一种更原始的方法,就是我写的containsOneWord 方法,需要toCharArray, 用遍历每一个字符来比较(推荐使用楼下的 indexOf和lastIndexOf )

2 邮箱 @ 前 @后。前 。后 都有具体的要求 。 所以拆分字符串 substring 和indexOf 配合使用,当然String类还有一个专门处理拆分字符串的类,不过那个类稍微有点复杂 好像是 StringToken什么吧,忘记了,用过正则后再没用过了,可以说被正则完全取代了。

3 @前1-40字符,并全是 字母: String 有返回长度的方法 length , 关键是如何判断 一段字符串全是字母了。而这个需求同样是公用的,可以封装成函数 。 所以isAllWords 方法就用来处理一个字符串是否全部都是字母组成
字母无非就是 a-z 和A-Z 逻辑判断下。
这里需要稍微了解点 ASCII 知道 a>z>A>Z >9>0
4 @后 等原理基本差不多了!
总之一句话送给楼主: 把String类的所有方法都掌握,有时间学习下正则表达式,字符串是最常用的一种对象,对他的操作很重要,掌握了字符串的处理,一般情况下问题都很好解决了!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-21
展开全部
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegex {
public static void main(String[] args) {

//Email
String email= "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern regex = Pattern.compile(email);
Matcher matcher = regex.matcher("dqwerqwete@qq.com");
boolean isMatched = matcher.matches();
System.out.println("是否符合:"+isMatched);

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式