大家好我需要知道java中是否有任何Predicate Validation检查String是否包含Numbers。我想允许特殊字符,但没有数字或空格。 有些谓词会检查字母,但是他们不允许特殊字符,我需要的东西只允许使用字母和特殊字符,如果String包含空格或数字,则返回false。
答案 0 :(得分:4)
我将使用正则表达式来表明我对这个问题的理解。您希望Predicate<String>
对于匹配
[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] 并且只允许使用下划线。我猜这个问题同时已被重写。