Java 使用循环验证用户输入

Java 使用循环验证用户输入,java,loops,java.util.scanner,Java,Loops,Java.util.scanner,好的,我目前正在尝试制作一个程序,以电子邮件地址的形式从用户那里获取输入,并检查其中是否包含“@”。我想使用循环逐步遍历用户输入的整个字符串,并检查每个字符的“@”。我有点不知道如何开始 我所做的是使用for循环遍历用户输入的整个字符串。然后,我使用do/while循环执行某行代码,直到用户输入有效的电子邮件。然而,它似乎总是有效的,不管它是否有一个@。我还想检查它是否只包含1'@'。正如你所看到的,我有点迷路了,但任何帮助都将不胜感激 import java.util.Scanner; cl

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

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

既然你必须使用循环,我推荐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!");
}
希望对你有帮助

循环循环中的每个字符。 检查“@”字符

String email = "test@gmal.com";
        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");
        }

其他人已经发表了一些有益的评论,但我注意到以下几点:

你的意思是在for语句之后没有{}吗?没有{}可以更改程序。
在for语句中,是否希望它为i=0?如果我开始时是输入字符串的长度,并且for语句中的测试是iJavadoc关于indexOf:

指定子字符串第一次出现的索引,如果没有出现,则为-1

例如:

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

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

我建议在这种情况下使用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!");
        }
    }
}
为什么不试试正则表达式呢

您可以将此代码用作有效类


此代码基于您的类有效,并继续出现一些严重错误。例如:如果用户输入包含更多@字符,会发生什么情况。

为什么需要循环?只要使用字符串。contains@I我知道,但这是任务的一部分。我们正在学习如何熟悉使用循环遍历字符串您了解返回的内容吗?删除do/while循环并检查scan2是否包含@character,循环中是否包含if条件。使用scan2.charAti.if无效{System.out.printlnValid;}似乎让人困惑,因为他使用的是i=scan2.length-1,输入一个字符或一个空字符串将导致与i的无限循环是的,你是对的,谢谢。这里有无限循环,谢谢!这很有帮助!
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); 
 }
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.");
        }
    }
}