在数组中搜索缺少的信息

时间:2016-08-03 01:37:07

标签: java arrays contains

我需要找到一种搜索电子邮件的方法,并查看数组中的电子邮件字段是否缺失" @","。"或者有一个空白。

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

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

2 个答案:

答案 0 :(得分:3)

前一张海报指出在迭代字符串时使用“布尔标志”。如果您正在进行一些微观的性能优化,这是可以的,但我认为与使用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
}

简而言之,“过早优化是万恶之源”。优化肯定很好,但有更好,更现代的方法,比如找出代码慢的原因。

答案 1 :(得分:0)

遍历电子邮件字符串,并为您要查找的每个字符设置布尔标志设置为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;
}