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