hzj86 2009-10-15 09:44
浏览 304
已采纳

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

/*
 * 面试题:判断一个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&gt;=65&amp;&amp;c&lt;=90) || (c&gt;=95&amp;&amp;c&lt;=122) || c=='_' || c=='-' || c=='.')) {
                    return false;
                }
            }
            //判断字符串里的每个字符是否都属于1-9,a-z,A-Z,或者"-" ,如果不是就是直接返回false
            for(char c : strs[1].toCharArray()) {
                if(!((c&gt;=65&amp;&amp;c&lt;=90) || (c&gt;=95&amp;&amp;c&lt;=122) ||c=='-')) {
                    return false;
                }
            }

            return true;
        }


    }</pre><br /><strong>问题补充:</strong><br /><span style="color: red">以上改进了一下,大家看一下还有没有问题,当时手写这道笔试题真是痛苦</span><br /><strong>问题补充:</strong><br />域名真多,不想再谈域名细节的问题,只是想知道这样做的思路对不对?
  • 写回答

3条回答 默认 最新

  • weixin_42518082 2009-10-15 12:32
    关注

    这一段还是有些问题
    -- 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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!