检查字符串中的特定字符集(密码)

时间:2015-06-06 13:02:52

标签: java string if-statement

我必须编写一个检查密码的程序。

  • 如果用户输入的密码为“bolt”,则会显示“WHERE
  • 否则会显示“The password is valid”。

该程序仅适用于 if 部分,但不适用于 else
那是当我输入 bolt 时,它会显示正确的信息 但是当我输入 bolt 以外的内容时,它不会显示“The password is invalid” 我被告知要测试使用 char.At 的所有四个字符。

The password is invalid

5 个答案:

答案 0 :(得分:2)

使用equalsIgnoreCase()检查更具可读性:

String password= input.next();
if(password.equalsIgnoreCase("bolt"){
   System.out.println("The password is valid");
}
else{
   System.out.println("The password is invalid!");
}

答案 1 :(得分:2)

为什么不直接检查字符串相等性?

String password= input.next();
if("bolt".equals(password))) {
  System.out.println("Valid password");
} else {
  System.out.println("InValid password");
}

如果您还认为equalsIgnoreCase()BOLT有效,请使用Bolt

如果您需要在没有equals的情况下实现此功能,则可以使用以下内容:

if (password != null && 
    password.length() == 4 && 
    (password.charAt(0) == 'B' || password.charAt(0) == 'b') && 
    ...) {
  System.out.println("Valid password");
} else {
  System.out.println("InValid password");
} 

答案 2 :(得分:1)

我使用string.matches函数接受正则表达式作为参数。 (?i)有助于进行不区分大小写的匹配。

if(string.matches("(?i)bolt")) 
{
System.out.println("Valid password");
}
else {System.out.println("InValid password");}

答案 3 :(得分:1)

有关更新的问题:

String password = input.next().toLowerCase();
String correctPassword = "bolt";

if (password.length() != correctPassword.length()) {
    System.out.println("Not valid");
    return;
}

for (int i = 0; i < correctPassword.length(); i++) {
    if (password.charAt(i) != correctPassword.charAt(i)) {
        System.out.println("Not valid");
        return;
    }
}
System.out.println("Valid");

在你的代码中有两个问题, 1.你的for循环没有任何意义,因为你已经在第一次迭代中检查了整个密码。第二次迭代会导致IndexOutOfBoundsException

  1. 您没有看到无效的密码消息,因为您的其他条件仅应用于最内层if(检查字符“T”或“t”)。
    因此,如果提供的密码以“BOL”开头,但最后一个字符不同,如“BOLA”或“BOLB”,那么您将看到无效的消息。但如果前三个char失败,那么它就不会执行else。
  2. 希望这会有所帮助..

答案 4 :(得分:0)

你正在做的事情没有多大意义。您应该使用字符数组然后按顺序检查。另一个小问题是else块与最后一个if语句相关联。应该将其附加到第一个if。这是一个需要智能地使用大括号的地方。