0 0

一道比较简单的面试题,但做得很糟5

/*
 * 面试题:判断一个email字符串的格式是否正确,不能使用正则表达式,用标准的程序流程图写出来 

*/

 

当时都email的格式都不太了解,回查了下才知道大概,重新做了下不知道还有没有更好的方法

 

public class EmailFormat {

 public static void main(String[] argsd) {
  System.out.println(isEmail("Johosf@fdsf@fdfs.com"));
 }
 
 public static boolean isEmail(String emailStr) {
  //判断字符串是否以下面字符结尾
  if(emailStr.endsWith(".com")|| emailStr.endsWith(".com.cn") 
         || emailStr.endsWith("educ.cn")
         || emailStr.endsWith(".net")
         || emailStr.endsWith(".gov.cn") 
         || emailStr.endsWith(".org.cn")
         ) {
   //截取"."之前的字符串
   emailStr = emailStr.substring(0, emailStr.indexOf('.'));
   
   //以“@”分割字符串
   String[] strs = emailStr.split("@");
   //判断是否只有一个“@”,也就是数组判断数组长度是否等于2
   if(strs.length ==2 ) {
    for(String str : strs) {
     //判断字符串是否以"_"开始,是就直接返回false
     if(str.startsWith("_")) {
      return false;
     }
     
    }
    for(char c : strs[0].toCharArray()) {
     //判断字符串里的每个字符是否都属于1-9,a-z,A-Z,或者"-",如果不是就是直接返回false
     if(!((c>=65&&c<=90) 
       || (c>=95&&c<=122) 
       || c=='_')) {
      return false;
     }
    }
    return true;
   }
   
  }
  return false;
 }

}

 

 


问题补充:
public static void main(String[] argsd) {
		System.out.println(isEmail("joso.hoo@fdsaf-fdfs.com"));
	}
	
	public static boolean isEmail(String emailStr) {
		if(!emailStr.contains("@")) {return false;}
		
		//判断字符串是否以下面字符结尾,是就去掉它,如果都不是就返回false
		if(emailStr.endsWith(".com")) {
			emailStr = emailStr.substring(0, emailStr.indexOf(".com"));
		} else if(emailStr.endsWith(".com.cn")) {
			emailStr = emailStr.substring(0, emailStr.indexOf(".com.cn"));
		} else if(emailStr.endsWith(".edu.cn")) {
			emailStr = emailStr.substring(0, emailStr.indexOf(".edu.cn"));
		} else if(emailStr.endsWith(".net")){
			emailStr = emailStr.substring(0, emailStr.indexOf(".net"));
		} else if(emailStr.endsWith(".gov.cn")){
			emailStr = emailStr.substring(0, emailStr.indexOf(".gov.cn"));
		} else if(emailStr.endsWith(".org.cn")){
			emailStr = emailStr.substring(0, emailStr.indexOf(".org.cn"));
		} else {
			return false;
		}
			
			//以“@”分割字符串
			String[] strs = emailStr.split("@");
			//判断是否只有一个“@”,也就是数组判断数组长度是否等于2
			if(!(strs.length ==2) ) { 
				return false; 
			} else if(strs[0].charAt(0) == '-' || strs[0].charAt(0) == '_' || strs[0].charAt(0) == '.'
					|| strs[1].charAt(0) == '-' || strs[1].charAt(0) == '_' || strs[1].charAt(0) == '.') {
				return false;
			} else {
				//判断字符串里的每个字符是否都属于1-9,a-z,A-Z,或者"_" "-" ".",如果不是就是直接返回false
				for(char c : strs[0].toCharArray()) {
					if(!((c>=65&&c<=90) || (c>=95&&c<=122) || c=='_' || c=='-' || c=='.')) {
						return false;
					}
				}
				//判断字符串里的每个字符是否都属于1-9,a-z,A-Z,或者"-" ,如果不是就是直接返回false
				for(char c : strs[1].toCharArray()) {
					if(!((c>=65&&c<=90) || (c>=95&&c<=122) ||c=='-')) {
						return false;
					}
				}
				
				return true;
			}
			
			
		}

问题补充:
以上改进了一下,大家看一下还有没有问题,当时手写这道笔试题真是痛苦
问题补充:
域名真多,不想再谈域名细节的问题,只是想知道这样做的思路对不对?
2009年10月15日 09:44

3个答案 按时间排序 按投票排序

0 0

采纳的答案

这一段还是有些问题
-- for(char c : strs[1].toCharArray()) { 
--   if(!((c>=65&&c<=90) || (c>=95&&c<=122) ||c=='-')) { 
--      return false; 
--   } 
-- }            

我们以前学校的邮箱yy@stud.aiai.edu.cn居然测试通不过.....
还有比如xx@vip.163.com等

2009年10月15日 12:32
0 0

你这个判断有问题啊
-- //截取"."之前的字符串 
--  emailStr = emailStr.substring(0, emailStr.indexOf('.'));

比如example.2009@qq.com就不能通过你的验证,但是他是合法的email地址

2009年10月15日 10:16
0 0

优化方案

1.你应该最先判断字符串中是否有"@",如果没有就直接返回false了

2009年10月15日 09:48

相关推荐

Global site tag (gtag.js) - Google Analytics