Проверка электронной почты с использованием циклов

У меня есть вопрос относительно проверки электронной почты с помощью Java. Я знаю, что правильно использовать его с помощью регулярных выражений и шаблонов, но по какой-то причине меня попросили написать его с помощью цикла. Другими словами, я должен проверить электронную почту, используя цикл for. Легко достичь требований с помощью шаблонов, но когда дело доходит до циклов, это немного сбивает с толку.

В электронном письме должна быть хотя бы одна буква до @ и хотя бы одна буква между @ и точкой .. И хотя бы две буквы после точки.

Я имел в виду, как написать цикл, который проверяет все эти требования, используя цикл for? Любая идея?


Ранее сегодня я задавал вопрос выше... Теперь я добрался сюда. Единственная проблема сейчас в том, что я не могу поставить минимум два символа после точки.

public class EmailValid {
    public static void main (String[] args) {
        System.out.print("Please Enter Your Email To Validate: ");
        Scanner input = new Scanner (System.in);
        String email  = input.nextLine();
        for (int i = 0 ;  i < email.length(); i ++) {
            if (email.indexOf("@") >= 1 ) {
                if (email.indexOf(".") >= email.indexOf("@")+2)
                    if ((email.indexOf("@")+email.indexOf(".") - email.length()) >= 1 )
                        System.out.print("Email Passed" + (email.length() - (email.indexOf("@")+email.indexOf("."))));
            }
        }
        System.out.print("\n String legnth: "+ (email.length()) + 
                "\n Index of @: " + email.indexOf("@") +
                "\n Index of dot: " + email.indexOf("."));
    }
}

person Whizz    schedule 08.06.2014    source источник
comment
Каков ваш вопрос (есть идеи? Слишком расплывчато)?   -  person Pshemo    schedule 08.06.2014
comment
вы только что описали это своим последним предложением. Если вы хотите получить некоторую помощь, лучше, если вы попытаетесь показать свою лучшую попытку (код).. или, по крайней мере, что вы пробовали до сих пор..   -  person LMG    schedule 08.06.2014
comment
Извини, я виноват. Я имел в виду, как я могу написать цикл, который проверяет все эти требования, используя цикл for?   -  person Whizz    schedule 08.06.2014
comment
Может быть, просматривая электронную почту String и обращая внимание на знаки «@» и «.». ?   -  person Serge Ballesta    schedule 08.06.2014
comment
Я понимаю концепцию перебора строки, но как я могу установить ограничения на количество букв, которые должны идти до или после «@» и «.».   -  person Whizz    schedule 08.06.2014
comment
У вас есть идея? Кто-нибудь?   -  person Whizz    schedule 08.06.2014
comment
Последнее ограничение — две буквы после точки. Ваше ограничение действительно только одна точка после '@' ??? Или две буквы после последней точки?   -  person Serge Ballesta    schedule 08.06.2014
comment
@Whizz- Пожалуйста, проверьте ответ и ответьте, если обнаружена какая-либо ошибка. Я надеюсь, что этот метод в порядке!   -  person Am_I_Helpful    schedule 08.06.2014
comment
@SergeBallesta по крайней мере одна буква перед '@' и по крайней мере одна буква перед '.' и не менее двух после '.'. Например, [email protected]   -  person Whizz    schedule 08.06.2014
comment
@JarrodRoberson Этот вопрос не повторяется. Вопрос, на который вы ссылаетесь, касается использования шаблонов. Мой вопрос не требует никаких скороговорок. Пожалуйста, внимательно прочитайте вопрос!   -  person Whizz    schedule 08.06.2014
comment
@shekharsuman, пожалуйста, проверьте мой прогресс :\   -  person Whizz    schedule 08.06.2014
comment
@SergeBallesta, пожалуйста, проверьте мой прогресс   -  person Whizz    schedule 08.06.2014
comment
Пожалуйста, не редактируйте свой вопрос, если он меняет то, что вы спрашиваете.   -  person Veedrac    schedule 09.06.2014


Ответы (1)


Лучше вам следует придерживаться метода, который вы приняли. Вы должны пройти всю строку, используя цикл for. Я думаю, что код должен быть таким: -

public class EmailValid {
 public static void main (String[] args) {
 System.out.print("Please Enter Your Email To Validate: ");
 Scanner input = new Scanner (System.in);
 String email  = input.nextLine();
 boolean flag=false;
 int countr=0,countd=0;
 loop:for (int i=0; i < email.length();i++) {                 //Better to iterate loop till end of the String "email"
 if(email.charAt(i)=='@'){
  countr++;
  if(countr>1){
   flag=false;
   break loop;
  }
   if(i>=1) 
   flag=true;
   else{
   flag=false;
   break loop;
    }
  }
 if(email.charAt(i)=='.'){
  countd++;
  if(countd>1){
      flag=false;
      break loop;}
   if(i>=3)
 flag=true;
 else{
   flag=false;
   break loop;}
if(email.length()>=i+3)
  flag=true;
 else{
  flag=false;
  break loop;}
 }
 if((email.indexOf(".")-email.indexOf("@"))>=2)
{
  flag=true;}
 else {
  flag=false;
  break loop;}
if(((int)email.charAt(i))>=65 && ((int)email.charAt(i))<=90)
 flag=true;
 else if(((int)email.charAt(i))>=97 && ((int)email.charAt(i))<=122)
 flag=true;
 else if(((int)email.charAt(i))>=48 && ((int)email.charAt(i))<=57)
 flag=true;
 else if(((int)email.charAt(i))==64 || ((int)email.charAt(i))==46)
 flag=true;
 else
 flag=false;
 //@ must at least have a char before itself and also there must be a character between '@' and '.'--So mininmum index of '@' >=1 and for '.' >=3.
 if(flag==false)
break loop;
 }
 if(flag==true && email.length()>=5)    // The minimum length of the String must be equal to minimum index of '.' +2, i.e., >=5. 
  System.out.println("Validated");
  else 
  System.out.println("Invalid Email");
   }
  }
person Am_I_Helpful    schedule 08.06.2014
comment
Таким образом, +=+=+=.+=+=@78 должен быть действительным адресом, если я уверен в вашем коде?!!! - person Serge Ballesta; 08.06.2014
comment
Вы все еще не подтверждаете, что '.' идет после '@'. ИМХО, вы должны использовать перечисление состояний (begin, after_arobas, after_dot), это будет чище и понятнее. Но хорошие попытки... - person Serge Ballesta; 08.06.2014
comment
@ Whizz-Проблема была из-за того, что опция «без прерывания» стала ложной! ИЗВИНИТЕ. Пожалуйста, попробуйте прямо сейчас! - person Am_I_Helpful; 08.06.2014
comment
@shekharsuman это в настоящее время полное во всех аспектах, как настоящее электронное письмо!, далеко не так! [RFC5322](tools.ietf.org/html/rfc5322). - person ; 09.06.2014
comment
Если это заняло 45 минут, чтобы ошибиться, вам следует пересмотреть свою профессию! - person ; 09.06.2014
comment
@JarrodRoberson Есть предложения помимо его ответа? - person Whizz; 09.06.2014
comment
@Whizz - да, прочитайте спецификацию RFC для адресов электронной почты и поймите ее, прежде чем пытаться реализовать что-то, что проверяет, является ли строка совместимым адресом. - person ; 09.06.2014
comment
@JarrodRoberson-Во-первых, я хотел сказать 45 минут, потому что ел, решая его проблему. Я выполнял обе работы одновременно. Во-вторых, мои 45 минут означали только 10+ минут, эти 45 должны были заставить его понять, как плохо задавать домашние вопросы! Наконец, я студент и все еще учусь; Мне не нужно менять свою профессию - моя электронная почта соответствует латинским символам, разрешенным для электронной почты, а не греческим, китайским и т. д., и я не забочусь о них. персонажи-Итак, я надеюсь, что ответил нормально во всех аспектах. Вы согласны, ИЛИ у меня действительно осталось еще несколько пунктов? - person Am_I_Helpful; 09.06.2014
comment
@JarrodRoberson-Пожалуйста, проверьте ссылку ниже и скажите мне, где она неверна: - tinypic.com /view.php?pic=iojhok&s=8 Он отлично работает для латинских символов, которые мы оба хотели!!! Пожалуйста, поделитесь своей мыслью. - person Am_I_Helpful; 09.06.2014