使用循环验证用户输入

时间:2015-11-02 13:37:51

标签: java loops java.util.scanner

好的,我正在尝试制作一个程序,以电子邮件地址的形式从用户那里获取输入,并检查其中是否有“@”。我想使用循环来遍历用户输入的整个字符串,并检查每个字符的“@”。关于如何开始,我有点迷茫。

我所做的是使用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");
    }
}

7 个答案:

答案 0 :(得分: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!");
}

答案 1 :(得分:0)

希望它可以帮到你

  1. 循环循环中的每个字符。
  2. 检查&#39; @&#39;字符

    {{1}}

答案 2 :(得分:0)

其他人已经发表了一些有用的评论,但这里有一些我注意到的其他事情:

  • 你的意思是在for语句之后没有&#34; {}吗?没有{}可以改变程序。
  • 在for语句中,您是否希望它是i&lt; = 0或i&gt; = 0?如果我开始是输入字符串的长度并且for语句中的测试是i&lt; = 0,除非输入为零长度,否则它将永远不会为真。
  • 为什么你有scan1和scan2字符串?
  • 您可能需要考虑从构造函数中删除搜索逻辑。

答案 3 :(得分: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);

答案 4 :(得分: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!");
        }
    }
}

答案 5 :(得分: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_.+-]+@[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); 
 }

答案 6 :(得分: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并继续发生一些严重错误。例如:“如果用户输入包含更多@个字符,会发生什么。