使用java程序验证电子邮件

时间:2014-04-25 04:53:03

标签: java loops email-validation

我正在编写一个关于电子邮件验证的java程序。

代码不得包含:

  • 内置函数(除了String方法之外)
  • 正则表达式

代码必须包含:

  • 集合

据我所知,如果不使用正则表达式,电子邮件验证会更难,但在接受采访时会提出这个问题。

有没有可能编写这样的代码或任何替代方法?

3 个答案:

答案 0 :(得分:2)

使用类似的东西:

public class EmailValidation {
    public static void main(String[] args) {
        String email = "SAMPLE_EMAIL";

        String[] deniedIdCharList = { ",", ";", "'", "\"", "[", "]", "|", "\\",
                 "=",  "!", "#", "$", "%", "^", "&", "*", "(", ")",
                "/", "`", "~", ":", "<", ">", "?", "{", "}" };

        int atLoc = email.indexOf("@");
        if (atLoc == -1) {
            System.out.println("fail");
        } else {
            String id = email.substring(0, atLoc);
            String domain = email.substring(atLoc + 1, email.length());

            if (domain.indexOf("@") != -1) {
                System.out.println("fail");
            }

            else {

                for (String deny : deniedIdCharList) {
                    if (id.indexOf(deny) != -1) {
                        System.out.println("fails");
                    }
                    if (domain.indexOf(deny) != -1) {
                        System.out.println("fails");
                    }

                }
                if (id.length() == 0 || domain.length() == 0) {
                    System.out.println("fails");
                }

                int dotIndex = domain.indexOf(".");
                String host = domain.substring(0, dotIndex);
                String extn = domain.substring(dotIndex + 1);
                if (host.length() == 0) {
                    System.out.println("fail");
                }
                if ((extn.length() != 2 && extn.length() != 3 && extn.length() != 5)) {
                    System.out.println("fail");
                }
                if (extn.length() == 5 && extn.indexOf(".") == -1) {
                    System.out.println("fail");
                }

            }

        }

    }
}

这适用于我所经历的大多数标准检查。代码可以在效率方面进行改进(A LOT),但我的猜测是,这更多来自“可以完成”学术的观点而不是使用观点。如果您打算使用此方法我强烈反对,请参阅@ vikeng21提供的答案

答案 1 :(得分:1)

如果 在本地执行此操作(而不是通过电子邮件的使用验证),则使用正则表达式是最佳选择。但是如果你不想使用它们,你的代码管理它就会变得很混乱。

如何克服这个问题。有很多方法

  1. 使用String Api检查字符串中的@符号。
  2. 使用StringTokeniser来标记给定的字符串,使用条件检查。
  3. 将给定字符串拆分为多个子字符串并进一步拆分。
  4. 还有更多。

    我建议不要经历编写锅炉板代码的所有麻烦,并对正则表达式说嗨。

答案 2 :(得分:0)

可以有多种形式的电子邮件验证,具体取决于您的电子邮件地址的外观。 如果它看起来像harry@potter.com一样简单,那么有很多方法可以验证这一点。其中一个可以检查'@'和'。'在for循环中只出现一次并且'。'总是在'@'之后跟随。

如果您在面试问题中给出一些有效电子邮件地址的示例,我们中的一些人可以提出解决问题的程序。