2015-11-02 210 views
0

好吧,我目前正在試圖製作一個程序,以用戶的電子郵件地址的形式輸入,並檢查它是否有'@'。我想用循環遍歷用戶輸入的整個字符串,並檢查每個字符的'@'。關於如何開始,我有點失落。用循環驗證用戶輸入

我所做的是使用for循環遍歷用戶輸入的整個字符串。然後我使用一個do/while循環來執行某一行代碼,直到用戶輸入一個有效的電子郵件。但是,無論它是否具有「@」,它似乎總是有效的。我也想檢查它是否只包含1'@'。我有點失落,因爲你可以看到,但任何幫助,將不勝感激!

import java.util.Scanner; 

class Test 
{ 
    public static void main(String args[]) 
    { 
     System.out.print("Enter an email address "); 
     Scanner scan = new Scanner(System.in); 
     String input = scan.nextLine(); 
     valid c = new valid(input); 
    } 
} 

class valid 
{ 
    String scan2; 
    char amper = '@'; 
    int i; 
    valid(String scan1) 
    { 
     scan2 = scan1; 

     for (i = scan2.length() - 1 ; i <= 0; i--) 
      do 
      { 
       System.out.print("That input is invalid"); 

      } while(scan2.indexOf(i) != amper); 

     System.out.println("That input is valid"); 
    } 
} 
+0

只需使用'string.contains?(」 @「)' – Arc676

+0

我知道,但它是一個任務的一部分我們。正在學習如何熟悉運行循環中的字符串 –

+0

您是否瞭解['indexOf'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#的indexOf(INT))的回報? – sam

回答

0

既然你已經使用一個循環,我會建議charAt。它給你一個給定的索引處的字符的字符串:

boolean found = false; 
//where string is the input that you are scanning to find an email address 
for (int i = 0; i < string.length; i++){ 
    if (string.charAt(i) == '@'){ 
     found = true; 
     break; 
    } 
} 
if (found){ 
    System.out.println("Found the @ character!"); 
} 
0

希望它可以幫助你

  1. 循環迴路中的每一個字符。
  2. 檢查「@」字符

    String email = "[email protected]"; 
         boolean valid = false; 
         for (int i=0;i<=email.length();i++) { 
          if (email.charAt(i)== '@') { 
           valid = true; 
           break; 
          } 
         } 
    
         if (valid) { 
          System.out.println("This is valid email Id"); 
         } else { 
          System.out.println("This is an Invalid email Id"); 
         } 
    
+0

'if(inValid){System.out.println(「Valid」);}'似乎讓我感到困惑 – Sybren

+0

是的,現在我更新了! @Sybren:由於他使用'I = scan2.length()感謝指出 – Truthira

0

其他人已經做了一些有益的意見,但這裏一些其他的東西我已經注意到:

  • 您的意思是有沒有「{}在for語句後沒有{}可以改變程序
  • 在for語句中,你是否希望它成爲我< = 0或i> = 0?如果我開始時輸入字符串的長度和for語句中的測試是i < = 0,除非輸入長度爲零,否則它永遠不會成立。
  • 爲什麼你有一個scan1和一個scan2字符串?
  • 您可能需要考慮從構造函數中刪除您的搜索邏輯。
+0

- 1',單個字符或空字符串的輸入將導致與'無限循環我<= 0' – phflack

+0

呀,你'對,謝謝。那裏有無限循環。 –

0

有關的indexOf的Javadoc:

指定字符串的第一個出現的索引,或-1,如果不存在這樣的發生。

例如:

Scanner sc = new Scanner(System.in); 
System.out.println("Enter your E-Mail:"); 

String line; 
do { 
    line = sc.nextLine(); 
} 
while(line.indexOf('@') == -1); 
0

我建議使用的charAt()在這種情況下的方法。這是我的代碼。

import java.util.Scanner; 

public class EmailAddr { 
    private String emailAddress; 

    public EmailAddr(String emailAddress){ 
     this.emailAddress = emailAddress; 
    } 

    public boolean isValid(){ 
     boolean isValid = false; 
     int nAtSign = 0; 

     for (int i = 0; i < emailAddress.length(); i++){ 
      if(emailAddress.charAt(i) == '@') 
       nAtSign++; 
     } 

     if(nAtSign == 1) 
      isValid = true; 
     return isValid; 
    } 

    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter your email address: "); 
     EmailAddr emailTest = new EmailAddr(sc.nextLine()); 
     sc.close(); 

     if(emailTest.isValid()){ 
      System.out.println("The email address is VALID!"); 
     } else { 
      System.out.println("The email address is INVALID!"); 
     } 
    } 
} 
+0

謝謝!這有助於很多! –

0

爲什麼不試試正則表達式?

public class EmailValidation { 

public static void main(String[] args) { 
Scanner scanner = new Scanner(System.in); 
boolean flag; 
do{ 
    String pattern="[a-zA-Z]*@[a-zA-Z.]*"; 

    //if u need to think of much better email validation.. 
    //String pattern="^[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$"; 

    System.out.println("Enter your Email here :"); 
    flag=scanner.next().matches(pattern); 
    if(!flag){ 
     System.out.println("Not a valid Email."); 
    }else{ 
     System.out.println("Valid Email."); 
    } 

}while(!flag); 
} 
0

您可以使用此代碼作爲class valid

class valid { 

    String scan2; 
    char amper = '@'; 
    boolean isFound = false; 

    valid(String scan1) { 
     scan2 = scan1; 

     for (int i = 0; i < scan2.length(); i++) { 
      if (scan2.charAt(i) == amper) { 
       isFound = true; 
      } 
     } 
     if(isFound) { 
      System.out.println("Seems like valid email."); 
     } 
    } 
} 

此代碼基於您class valid,繼續一些嚴重錯誤。作爲例子:「什麼爲什麼你需要一個循環發生,如果用戶輸入包含更多的@字符