好的,我正在尝试制作一个程序,以电子邮件地址的形式从用户那里获取输入,并检查其中是否有“@”。我想使用循环来遍历用户输入的整个字符串,并检查每个字符的“@”。关于如何开始,我有点迷茫。
我所做的是使用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 :(得分: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)
希望它可以帮到你
检查&#39; @&#39;字符
{{1}}
答案 2 :(得分:0)
其他人已经发表了一些有用的评论,但这里有一些我注意到的其他事情:
答案 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
并继续发生一些严重错误。例如:“如果用户输入包含更多@
个字符,会发生什么。