问题陈述是这样的:
我们需要创建一个名为 emailId
的String数据类型必须使用适当的setter方法设置电子邮件ID。
电子邮件ID检查的验证规则必须在main()中实现。
条件是:
电子邮件ID的总长度必须为&gt; 3且<20。
emailId必须包含“@”后跟最少1个,最多2个“。”字符。
“@”之前的子字符串必须包含大写字母,小写字母和“_”(下划线)符号的组合。
电子邮件ID的第一个字母必须为大写字母。
如果以上所有条件都有效,则应显示“电子邮件ID有效”,否则应显示相应的错误消息
这是我的代码:
public class EmailCheck {
String emailId;
public void setEmailId(String emailId){
this.emailId=emailId;
}
public String getEmailId(){
return emailId;
}
public static void main(String[] args) {
EmailCheck em = new EmailCheck();
em.setEmailId("CFDV@gm.a.il.com");
String email = em.getEmailId();
int length = email.length();
boolean flag1 = false;
boolean flag2 = false;
boolean flag3 = false;
boolean flag4 = false;
boolean flag5 = false;
boolean flag6 = false;
boolean flag7 = false;
int count = 0;
//Condition 1
if((length>3 && length<20)== true)
flag1 = true;
else
flag1 = false;
//Condition 2
int temp = email.length();
if(email.contains("@")){
flag2=true;
int a=email.indexOf("@");
for(int i=a;i<temp;i++){
if(email.charAt(i)=='.'){
flag3=true;
count=count+1;
}
}
if(count<1||count>2){
flag4=false;
}
else{
flag4=true;
}
}
else{
flag2 =false;
System.out.println("No @ symbol present");
}
//Condition 3
if(email.matches("[A-Z a-z _]+@.*")) //Unable to get the right RegEx here!
flag5 = true;
else
flag5 = false;
//Condition4
if(Character.isUpperCase(email.charAt(0))==true)
flag6 = true;
else
flag6=false;
if(flag1==true && flag2==true && flag3==true && flag4==true && flag5==true &&flag6==true)
System.out.println("Email ID is valid");
else{
if(flag1==false)
System.out.println("Inavlid length of Email ID");
if(flag2==false||flag3==false||flag4==false)
System.out.println("Invalid Position of Special Characters");
if(flag5==false)
System.out.println("Invalid combination for username");
if(flag6==false)
System.out.println("Invalid case of first letter");
}
}
}
我不确定条件#2(逻辑?)和条件#3(RegExp部分)。一些测试用例似乎是正确的,其余的都是错误的(由于#2和esp#3中的错误逻辑,我认为。)
请告诉我,为了获得正确的输出,必须在此处进行哪些更改。 谢谢!
答案 0 :(得分:4)
如果你坚持使用正则表达式,你可以使用它但没有正确验证你可能遇到各种麻烦
static Pattern emailPattern = Pattern.compile("[a-zA-Z0-9[!#$%&'()*+,/\-_\.\"]]+@[a-zA-Z0-9[!#$%&'()*+,/\-_\"]]+\.[a-zA-Z0-9[!#$%&'()*+,/\-_\"\.]]+");
public static boolean isValidEmail(String email) {
Matcher m = emailPattern.matcher(email); return !m.matches();
}
或者您可以使用
public static boolean isValidEmailAddress(String email) {
boolean result = true;
try {
InternetAddress emailAddr = new InternetAddress(email);
emailAddr.validate();
} catch (AddressException ex) {
result = false;
}
return result;
}
哪个核心java实用程序会更好......
请注意,这些都不会保证一个地址实际上是有效的,只是它是正确形成的,所以假设可能存在
String email_regex = "[A-Z]+[a-zA-Z_]+@\b([a-zA-Z]+.){2}\b?.[a-zA-Z]+";
String testString = "Im_an_email@email.co.uk";
Boolean b = testString.matches(email_regex);
System.out.println("String: " + testString + " :Valid = " + b);
将检查您可以与
组合的最后三个约束string.length()>3 && string.length()<20
答案 1 :(得分:0)
电子邮件ID的总长度必须为&gt; 3且<20。
你有这个部分很好 - 一对长度检查。需要考虑的事项:
if (condition == true)
,只需if (condition)
。emailId必须包含“@”,后跟最少1个,最多2个“。”字符。
首先检查@符号并获取索引。完成后,您可以拆分字符串。然后,您可以在句点上拆分子字符串并计算它们 - 您需要两个或三个。
可能还有一个正则表达式也会这样做。
“@”之前的子字符串必须包含大写,小写和“_”(下划线)符号的组合。
您可以使用this approach确保正则表达式必须与每个部分匹配。就目前而言,我相信如果有大写字母,小写字母,或下划线而不是检查所有三个字符串,那么正则表达式将会起作用。
电子邮件ID的第一个字母必须是大写字母。
与第一部分相同的评论,删除== true
并在方法失败时将其短路。