Java main方法中如何正确比较方法返回的字符串实现登录判断
登录循环无法正常跳出问题修复
核心问题点
login()方法返回的登录成功字符串开头带换行符\n,但循环内判断相等的目标字符串没有该前缀,直接比对永远无法命中成功条件。- 循环内连续两次调用
login()方法,会重复执行两次校验逻辑,属于无意义的性能损耗,若校验逻辑带状态计数(比如输错N次锁账号)还会触发意外bug。 - 原判断逻辑没有处理返回字符串前后的不可见空白字符,鲁棒性差。
修复后代码
main方法循环逻辑
while (true){ System.out.println("\nLogin: "); System.out.println("\nEnter a username: "); String loginUsername = sc.nextLine(); System.out.println("Enter a password: "); String loginPassword = sc.nextLine(); // 单次调用login方法,结果存入变量复用,避免重复执行校验 String loginRes = login(loginUsername,loginPassword); System.out.println(loginRes); // 去除结果首尾所有空白(换行、空格、制表符)后再做匹配,规避不可见字符导致的匹配失败 if (loginRes.trim().equalsIgnoreCase("Successfully logged in!")) { break; } }
login方法返回逻辑(可选规范优化)
// 布尔值判断直接写变量名即可,不需要冗余写==true if (check) { return "\nSuccessfully logged in!"; } else { return "\nWrong username/password"; }
注:如果不想改动原有login方法的返回格式,仅修改main方法里的判断逻辑即可,
trim()方法会自动过滤掉返回字符串开头的换行符,不会影响匹配结果。如果要从根源统一字符串格式,也可以把login方法返回值里的前置\n去掉,把换行打印逻辑统一放到调用侧。
预期运行逻辑
- 登录校验返回账号/密码错误结果时,while循环会持续执行登录交互流程
- 当用户输入正确账号密码,
login返回值经trim处理后匹配成功字符串,循环正常跳出
内容的提问来源于stack exchange,提问作者kriskata1
相关产品推荐
相关产品推荐

