在数组中搜索缺失信息

Search an array for missing information

我需要找到一种方法来搜索电子邮件并查明数组中的电子邮件字段是否缺少“@”、“.”。或者有一个空白 space.

到目前为止,我找到了 http://www.tutorialspoint.com/java/util/arraylist_contains.htm , and http://www.tutorialspoint.com/java/lang/string_contains.htm。这很好,但仍然让我感到困惑。

我有一个获取电子邮件的方法 (getEmail),我试图找出它如何循环遍历 myRoster 数组并打印出每封缺少该信息的电子邮件。任何澄清或帮助将不胜感激。

循环遍历电子邮件字符串,并将您要查找的每个字符的布尔标志设置为 false。如果找到要搜索的字符,请将标志设置为 true。在循环结束时,如果标志仍然为假,则未找到该字符。

例如..

Boolean atFound = false;
Boolean periodFound = false;
Boolean spaceFound = false;
For (integer cnt = 0; cnt < email.length; cnt ++)
{
    If (email [cnt].compareTo ("@") == 0)
        atFound = true;
    If (email [cnt].compareTo (".") == 0)
        periodFound = true;
    If (email [cnt].compareTo (" ") == 0)
        spaceFound = true;
}

之前的发帖人指出在迭代字符串时使用 "boolean flags"。如果您正在进行一些微观性能优化,这没关系,但我认为与使用一些更简单的方法(如 String#indexOf.

相比,这有点过度优化了
public boolean hasValidEmail(String email) {
    int at = email.indexOf('@');
    //first ensures '@' exists, then that '.' is after '@', and lastly checks for no space
    return at > 0 && email.lastIndexOf('.') > at && !email.contains(' ');
}

它绝对不是完美的,并且已经尝试过对这些东西进行正则表达式验证,但是对于简单的检查来说已经足够了。

如果您确实只想对字符串进行一次迭代,则可以进行迭代 #toCharArray。虽然我建议只使用直接字符比较 #compareTo:

char c = /* some char */;
if (c == '@') {
    //etc
}

简而言之,"premature optimization is the root of all evil"。优化当然没问题,但还有更好、更现代的方法,例如分析代码速度慢的原因。