String谓词以验证String中是否包含数值

时间:2017-08-23 06:05:16

标签: java validation predicates

大家好我需要知道java中是否有任何Predicate Validation检查String是否包含Numbers。我想允许特殊字符,但没有数字或空格。   有些谓词会检查字母,但是他们不允许特殊字符,我需要的东西只允许使用字母和特殊字符,如果String包含空格或数字,则返回false。

3 个答案:

答案 0 :(得分:4)

我将使用正则表达式来表明我对这个问题的理解。您希望Predicate<String>对于匹配

的任何字符串返回true
[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;
}

答案 1 :(得分:1)

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

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

任何与[a-zA-Z _] *匹配的字符串都返回true。

答案 2 :(得分:0)

因为如果字符串包含至少一个数字或空格字符,则谓词将返回 false,否则返回 true,您可以执行以下操作:

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

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