Проверка специальных символов, если оператор не работает. Java - PullRequest
0 голосов
/ 09 июля 2020

Для начала, я новичок в java, поэтому я не уверен, есть ли более простой способ сделать это. В настоящее время я создаю средство проверки пароля. У меня большая часть кода работает без сбоев, за исключением моей проверки специальных символов.

Мои проверки кода работают для длины и того, есть ли число, однако это не для моей проверки специальных символов. В настоящее время у меня установлен оператор if, где, если один из символов в строке не является буквой, di git или пробелом, чтобы иметь specialCharCheck = true. в противном случае оставьте значение false.

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);

        }
    }
}

я упустил простую ошибку? Я знаю, что есть другой способ сделать это, но мне показалось, что это выглядело более эффективным. И лог c имел для меня смысл.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Character.isLetterOrDi git (char) ожидает символ в качестве аргумента, но вместо этого вы передаете ему int i. Вам необходимо иметь,

if (!Character.isLetterOrDigit(pass.charAt(i)) && !Character.isSpaceChar(pass.charAt(i)))
                {
                    specialCharCheck = true;
                    //System.out.println("Test");
                }
                else 
                {
                    specialCharCheck = false;
                }
0 голосов
/ 09 июля 2020

Вот решение с 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);

        }
    }
...