Java字符串大写字母检查方法始终返回false的问题求助
Java字符串大写字母检查方法始终返回false的问题求助
嘿,我看了你的代码,发现两个关键问题导致你的大写字母检查逻辑总是出问题:
1. 大写字母检查方法的逻辑错误
你的checkString方法里,每次循环都会直接把capitalFlag重新赋值为当前字符是否是大写字母的结果。这就意味着,只有当字符串的最后一个字符是大写字母时,方法才会返回true,之前的字符就算有大写也会被后面的非大写字符覆盖掉flag值。
举个例子:如果密码是"Abc123",循环到第一个字符'A'时,capitalFlag会被设为true,但接着循环到'b'时又会被改成false,最后到'3'还是false,所以方法最终返回false,这完全不符合你的需求。
修正后的方法(两种可选写法)
第一种是高效写法,找到大写字母直接返回true,不用遍历整个字符串:
public static boolean checkString(String str) { for(int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (Character.isUpperCase(ch)) { return true; // 找到大写字母立刻返回true,终止循环 } } return false; // 遍历完没找到大写字母,返回false }
第二种是保留flag的写法,找到后标记为true,后续不再修改:
public static boolean checkString(String str) { boolean capitalFlag = false; for(int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (Character.isUpperCase(ch)) { capitalFlag = true; break; // 找到后可以跳出循环,提升效率 } } return capitalFlag; }
2. 条件判断里的冗余代码
你在else if里写了!checkString(enterPasswordAgain) || !checkString(enterPasswordAgain),这完全是重复调用同一个方法两次,和只写一次!checkString(enterPasswordAgain)效果一模一样,既冗余又没必要,直接简化成一次调用就好。
修正后的条件判断代码
else if (!checkString(enterPasswordAgain)){ btnSubmit.setForeground(Color.RED); btnSubmit.setText("Make sure your password has at least one capital letter."); System.out.println("false"); } else { btnSubmit.setForeground(Color.GREEN); btnSubmit.setText("Password validated successfully!"); // 这里补全你原本没写完的后续逻辑 }
备注:内容来源于stack exchange,提问作者William Hughes
相关产品推荐
相关产品推荐

