用于验证字符串是否包含 java 中的数值的字符串谓词

String Predicates to validate if a String contains numeric Value in java

java 中的任何谓词验证是否检查字符串是否包含数字?

我想允许特殊字符但不允许数字或空格。有检查字母的谓词,但它们不允许特殊字符,我需要一些只允许字母和特殊字符的东西,如果字符串包含空格或数字,则 return false。

我将使用正则表达式来展示我对问题的理解。您想要 Predicate<String> 对于任何字符串匹配 returns 为真

[a-zA-Z_]*

一种无规律地执行此操作的方法是使用 for 循环并检查每个字符:

Predicate<String> predicate = x -> {
    for (int i = 0 ; i < x.length() ; i++) {
        if (!Character.isLetter(x.charAt(i)) && !x.charAt(i) == '_') {
            return false;
        }
    }
    return true;
};

这是一个做同样事情的方法:

public static boolean test(String x) {
    for (int i = 0 ; i < x.length() ; i++) {
        if (!Character.isLetter(x.charAt(i)) && !x.charAt(i) == '_') {
            return false;
        }
    }
    return true;
}

可以用更优雅的方式来完成:

Predicate<String> p = (s -> s.matches("[a-zA-Z\_]*"));

为匹配 [a-zA-Z_]* 的任何字符串返回 true。

如果字符串至少包含一位数字或 space 个字符,则您的谓词应 return 为假,否则为真,您可以执行以下操作:

Predicate<String> p = s -> !s.matches(".*[ \d].*");

这种方法的优点是每个UTF-8字母和每个特殊字符在p中都是有效的。出于某种原因,其他答案只允许使用 ASCII 字母 ([a-zA-Z] 并且只允许使用下划线。我想这个问题同时被重写了。