2016-08-03 54 views
0

我需要找到一種方法來搜索電子郵件,並確定數組中的電子郵件字段是否缺少「@」,「。」。或有一個空白空間。在數組中搜索缺少的信息

到目前爲止,我發現http://www.tutorialspoint.com/java/util/arraylist_contains.htmhttp://www.tutorialspoint.com/java/lang/string_contains.htm。這是好的,但仍然讓我困惑。

我有一個get方法的電子郵件(getEmail)和我試圖弄清楚它將如何循環通過myRoster陣列和打印出每個電子郵件缺少該信息。任何澄清或幫助,將不勝感激。

+0

請在[編輯]中分享您正在使用的代碼。一個簡單的「for循環」和字符串比較是你真正需要的。 'ArrayList.contains'不需要 –

+0

建議標題:搜索一個字符的數組。 –

回答

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; 
} 
+0

感謝您的幫助和建議!我將不得不面對這兩個答案,但我認爲盧克的答案將是最佳路線。 – aking76

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 
} 

總之,「過早的優化是所有罪惡的根源。」優化當然沒問題,但有更好,更現代的方法,比如分析找出代碼速度慢的原因。

+0

整個電子郵件驗證問題結果比您想象的要複雜得多。原來,你不能真正寫一個完全符合RFC標準的正則表達式。我找不到任何看起來可以接受的公共圖書館。限制性較強的解決方案往往很脆弱,很多解決方案都不能接受新的頂級域名。所以你最好用上面簡單的解決方案或者像下面這樣簡單的正則表達式: [A-Z0-9 ._%+ - ] + @ [A-Z0-9 .-] + \。[AZ] 然後給他們發送一封電子郵件,並要求採取一些行動,這是一種歷久不衰的方法。 –

+0

的確,我認爲其中一個較長的是300行左右的荒謬的東西?從字面上看,有一個網頁在某處比較各種正則表達式,他們只是得到......大。 – Rogue

+0

最大的罪將是拒絕用戶服務。我剛剛學過TLD,現在接受非日文字符集,如Japanes Kanji。所以我甚至悔改我的簡單正則表達式。 –