[英]Special character check, if statement not working. Java
對於初學者,我對 java 很陌生,所以我不確定是否有更簡單的方法來做到這一點。 我目前正在創建一個密碼檢查器。 除了我的特殊字符檢查外,我的大部分代碼都運行順利。
我的代碼檢查適用於長度,以及是否有數字,但不適用於我的特殊字符檢查。 我目前將 if 語句設置為如果字符串中的一個字符不是字母、數字或空格,則設置 specialCharCheck = true。 否則,保持為假。
import java.util.Scanner;
public class Project5_Part1 {
public static void main(String[] args) {
String pass;
String confirm;
boolean parameters;
Scanner in = new Scanner(System.in);
System.out.print("Please enter password : ");
pass = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
confirm = in.nextLine();
parameters = isValid(pass);
while (!pass.equals(confirm) || (!parameters))
{
System.out.println("The password is invalid");
System.out.print("Please enter the password again : ");
pass = in.nextLine();
System.out.print("Please re-enter the password to confirm : ");
confirm = in.nextLine();
parameters = isValid(pass);
}
if (isValid(pass))
{
System.out.println("The password is valid");
}
}
public static boolean isValid(String pass) {
boolean numberCheck = false;
boolean specialCharCheck = false;
if (pass.length() < 8) {
return false;
} else {
for (int i = 0; i < pass.length(); i++)
{
if(Character.isDigit(pass.charAt(i)))
{
numberCheck = true;
}
if (!Character.isLetterOrDigit(i) && !Character.isSpaceChar(i))
{
specialCharCheck = true;
//System.out.println("Test");
}
else
{
specialCharCheck = false;
}
}
return (numberCheck && specialCharCheck);
}
}
}
我錯過了一個簡單的錯誤嗎? 我知道還有另一種方法可以做到這一點,但我覺得這樣做看起來更有效率。 這個邏輯對我來說很有意義。
Character.isLetterOrDigit(char)需要一個字符作為參數,但您傳遞的是一個“int i”。 你需要有,
if (!Character.isLetterOrDigit(pass.charAt(i)) && !Character.isSpaceChar(pass.charAt(i)))
{
specialCharCheck = true;
//System.out.println("Test");
}
else
{
specialCharCheck = false;
}
這里有一個while的解決方案:
public static boolean isValid(String pass) {
boolean numberCheck = false;
boolean specialCharCheck = false;
if (pass.length() < 8) {
return false;
} else {
int i = 0;
while (i < pass.length() && (!numberCheck || !specialCharCheck)) {
if (!numberCheck && Character.isDigit(pass.charAt(i))) {
numberCheck = true;
}
if (!specialCharCheck && !Character.isLetterOrDigit(i) && !Character.isSpaceChar(i)) {
specialCharCheck = true;
}
i++;
}
return (numberCheck && specialCharCheck);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.