用java判断是否是合法邮箱即验证邮箱格式

判断是否是合法邮箱

前言

在Java学习过程中,想必一定会有字符串的学习,其中关于字符串的一些内置函数就有很多,像我这种初学者就很头疼。

类似于charAt()函数、replace()函数这些简单的倒还可以理解,像toUpperCase()函数针对的数据类型是字符串,当实现某字符串中的某一个小写字母转大写时,通过charAt()函数定位到的数据类型又是char字符类型,为实现最终目的还需将char转为String。

当然,这与这篇博客其实不相干,但我解决邮箱的思路和小写转大写的思路其实是一样的,需要一步一个脚印,每一段代码你都得知晓是什么意思。

解决思路

首先这道题是在学校oj平台遇到的。

看一下题目:
输入一个字符串,判断是否是合法邮箱(格式正确即可,不管是否真的存在)输入的只能是字母、数字、下划线、@以及.五种, @前后只能是字母或者数字,而且.后只能是com, 是则输出YES ,否则输出NO

这道题的标准解法是正则表达式
哦豁,完蛋,老师没咋细讲(其实是我没听)

我的解决思想是每一个条件都符合才输出YES,只要有一个条件不符合输出NO。

这种思想类似防火墙的安全策略,只要你的条件不符合,这条数据流量就不给过。

那都有什么条件呢?
条件1:输入的只能是字母、数字、下划线、@以及.五种

条件2:@前后只能是字母或者数字
隐藏条件:必须含@,不然非法格式

条件3:.后只能是com
隐藏条件:必须含.,且字符串后四位为.com

可以嗷,思路出来了。

条件可以用方法体实现,一个条件一个方法体。
可以考虑bool函数,但是我失败了,我太菜了
所以我考虑当这个条件符合,就赋予计数器数值为特定值
在主函数用if函数判断返回值是否为特定值判断条件是否符合

代码实现

这是条件1,当条件符合,返回count数值为1。

	   public static int tj1(String str1){
		   int count=0;
		   for(int i=0;i<str1.length();i++){
			   if(str1.charAt(i)>='a'&&str1.charAt(i)<='z'
			   ||str1.charAt(i)>='A'&&str1.charAt(i)<='Z'
			   ||str1.charAt(i)>='0'&&str1.charAt(i)<='9'
			   ||str1.charAt(i)=='_'
			   ||str1.charAt(i)=='@'
			   ||str1.charAt(i)=='.'){
				   count=1;
			   }
			   else{
				   count=2;
				   break;
			   }
		}
		return count;	   
	   }

这是条件2,包含隐含条件
当隐含条件符合后,count=1
只有count=1才能执行whlie函数
当while函数里条件符合,返回count数值为3
也就是说,这个条件的返回值只有是3才符合条件,1和2不行

public static int tj2(String str1){
		   int count = 0;
		   for(int i=0;i<str1.length();i++){
			   if(str1.charAt(i)=='@'){
				   count=1;
			   }
		   }
		   while(count==1){
		      int i=str1.indexOf('@');
		      if(((str1.charAt(i-1)>='a'&&str1.charAt(i-1)<='z')
		      ||(str1.charAt(i-1)>='A'&&str1.charAt(i-1)<='Z')
		      ||(str1.charAt(i-1)>='0'&&str1.charAt(i-1)<='9'))
		      &&((str1.charAt(i+1)>='a'&&str1.charAt(i+1)<='z')
		      ||(str1.charAt(i+1)>='A'&&str1.charAt(i+1)<='Z')
		      ||(str1.charAt(i+1)>='0'&&str1.charAt(i+1)<='9'))){
			    count=3;
		      }
		      else{
		    	  count=2;
		      }
		   }
		return count;
	   }

这是条件3,当条件符合,返回count数值为1。

	   public static int tj3(String str1){ 
		   int count=0;
		   if(str1.charAt(str1.length()-4)=='.'
		   &&str1.charAt(str1.length()-3)=='c'
		   &&str1.charAt(str1.length()-2)=='o'
		   &&str1.charAt(str1.length()-1)=='m'){
			   count=1;
		   }
		   else{
			   count=2;
		   }		   
		return count;
	   }

这是主函数,只有三个方法的返回值分别为1,3,1时,
这个邮箱格式才合法。

public static void main(String[] args){
		   Scanner scan = new Scanner(System.in);
		   String str = scan.nextLine();
		   int jg1=tj1(str);
		   int jg2=tj2(str);
		   int jg3=tj3(str);
		   if(jg1==1&&jg2==3&&jg3==1){
			   System.out.println("YES");
		   }
		   else{
			   System.out.println("NO");
		   }
		   scan.close();
    }

———————————————————————————

总结

虽然这比正则表达式复杂一点,但我觉得比正则表达式通俗易懂嘿嘿嘿。

其次这个方法的思想结构很清晰,条条框框很清楚,很适合锻炼编程思想。

但我可不推荐考试的时候用这个方法,本来这个就是考正则表达式这个知识点的。

值得注意的是写条件里的&&和||时,一定要小心谨慎,必要时加上括号。

代码可别忘了加

import java.util.*;
public class Main {}

猜你喜欢

转载自blog.csdn.net/weixin_44747184/article/details/102881606