当前位置: 首页 > 知识库问答 >
问题:

如何在密码验证中不使用特殊字符(没有Regex)?

冷善
2023-03-14

我是Java的初学者,目前我有这样的代码。

规则是:没有特殊字符,只有小写或0到9之间的数字。

这段代码工作正常,但也需要特殊字符。有没有其他方法可以阻止这种情况发生?请不要正则表达式。

if (Password.length() >= 10 && Password.equals(Password.toLowerCase())) {
    System.out.println("Password: Success");
} else {
    System.out.println("Password: Unsuccessful");
}

共有2个答案

呼延卓
2023-03-14

您可以使用IntStream#allMatch方法:

private static boolean isLowerCaseOrDigits(String str) {
    return str.codePoints().allMatch(ch ->
            Character.isLowerCase(ch) || Character.isDigit(ch));
}
public static void main(String[] args) {
    Boolean[] arr = {
            isLowerCaseOrDigits("EqwerJ"),
            isLowerCaseOrDigits("as56re"),
            isLowerCaseOrDigits("vb3451"),
            isLowerCaseOrDigits("827136"),
            isLowerCaseOrDigits("8271)&")};

    Arrays.stream(arr).forEach(System.out::println);
    // false
    // true
    // true
    // true
    // false
}

另请参见:java 8中anyMatch和findAny的区别

郤立果
2023-03-14

您可以使用字符串。codePoints方法,用于获取此字符串的字符值的流,并在第一次出现非小写和非数字字符之前对其进行计数。您的代码可能如下所示:

public static void main(String[] args) {
    System.out.println(isLowerCaseOrDigits("EqwerJ")); // false
    System.out.println(isLowerCaseOrDigits("as56re")); // true
    System.out.println(isLowerCaseOrDigits("vb3451")); // true
    System.out.println(isLowerCaseOrDigits("827136")); // true
    System.out.println(isLowerCaseOrDigits("8271)&")); // false
}
private static boolean isLowerCaseOrDigits(String str) {
    return str.codePoints()
            .takeWhile(ch -> Character.isLowerCase(ch)
                    || Character.isDigit(ch))
            .count() == str.length();
}

或者在没有流的情况下,可以使用字符串。toCharArray方法并迭代该字符串的字符数组。第一次出现非小写和非数字字符时返回false:

private static boolean isLowerCaseOrDigits(String str) {
    for (char ch : str.toCharArray()) {
        if (!Character.isLowerCase(ch) && !Character.isDigit(ch)) {
            return false;
        }
    }
    return true;
}
 类似资料:
  • TL;DR:在创建数据库对象时,对于MS Access 2000-2003数据库,应该使用什么常量? 我还有一个应用程序,它使用UCANAccess/JackCess连接到网络共享上的MDB。然而(据我所知),它使用登录用户的凭据,其中许多用户具有只读访问权限。只有系统/网络管理员才有写权限。 有问题的数据库没有密码保护。(打开时我不需要输入密码。) 我的目的是让应用程序在向DB写入之前使用uCa

  • 我在rails应用程序中使用了devise gem。我找到的验证密码格式是 它工作正常,但我希望我的密码满足两个要求1)密码必须包含至少6个字母(它可以是大写字母,小写字母,数字或所有字母的组合)。 2)第二个标准是密码不应该包含任何特殊字符。 我不知道如何做到这一点,我发现的只是,我如何能强制特殊字符的存在,而不是反之亦然。 提前谢谢

  • 我在URL中有以下格式。 这里的密码类似于qDTA*$X)ME/74。当我在URL中直接使用此密码时,邮递员不响应。我应该如何继续测试此url?

  • 问题内容: 我的应用程序正在使用这样的NSURL: 当我试图做一个从这个NSURL获取数据的任务时,如下所示: 但是尝试从该地址获取数据时出现错误,尽管当我使用野生动物园去链接时:“ http://www.geonames.org/search.html?q =Aïn+Béïda+ Algeria&country =“我可以看到数据。我该如何解决? 问题答案: 迅捷2 编码的URL现在是: “ h

  • 问题内容: 如何在Java / Eclipse中使用/显示♥,♦,♣或like等字符? 当我尝试直接使用它们时,例如在源代码中,Eclipse无法保存文件。 我能做什么? 编辑:如何找到Unicode转义序列? 问题答案: 问题在于,您使用的字符无法在文件设置为(Cp1252)的编码中表示。从我的角度来看,您基本上有两个选择: 选项1. 更改编码。 根据IBM的介绍,您应该将编码设置为UTF-8。