如何在字符串方法中使用AND逻辑?Java邮箱校验代码修复求助
修复邮箱校验的Java代码问题
你的原代码因逻辑表达式错误,无法正确校验邮箱后缀,以下是具体修复方案:
原代码的问题分析
原while循环的条件:
!email.contains("@") && !email.endsWith(".com") || !email.contains("@") && !email.endsWith(".ca")
这个逻辑等价于!email.contains("@") && (!email.endsWith(".com") || !email.endsWith(".ca")),仅会校验邮箱是否包含@——只要邮箱含@,不管后缀是不是.com或.ca都会直接通过,完全没起到后缀检查的作用。
修复后的代码
根据你的需求(邮箱必须包含@,且以.com或.ca结尾),正确逻辑是:如果邮箱不包含@,或者既不以.com也不以.ca结尾,就判定无效。
方案1:直接判断后提示退出(匹配你原代码的return逻辑)
System.out.println("Enter your email:"); email = input.next(); // 校验邮箱是否无效 if (!(email.contains("@") && (email.endsWith(".com") || email.endsWith(".ca")))) { System.out.println("Your email is not valid"); return; }
方案2:循环提示用户重新输入(更友好的交互)
如果希望用户输入错误后可重新输入,而非直接退出,可修改为:
System.out.println("Enter your email:"); email = input.next(); // 邮箱无效时循环提示重新输入 while (!(email.contains("@") && (email.endsWith(".com") || email.endsWith(".ca")))) { System.out.println("Your email is not valid"); System.out.println("Enter your email again:"); email = input.next(); }
逻辑说明
!(email.contains("@") && (email.endsWith(".com") || email.endsWith(".ca"))) 是对有效邮箱条件的直接否定:
- 有效邮箱条件:
包含@并且(以.com结尾 或者 以.ca结尾) - 无效邮箱条件:对上述条件取反,即
不包含@或者(既不以.com结尾 也不以.ca结尾)
内容的提问来源于stack exchange,提问作者naz192
相关产品推荐
相关产品推荐

