【问题标题】:String Predicates to validate if a String contains numeric Value in java用于验证字符串是否包含 java 中的数字值的字符串谓词
【发布时间】:2017-08-23 06:05:15
【问题描述】:

java中是否有任何谓词验证来检查String是否包含数字?

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

【问题讨论】:

  • 你对特殊字符的定义是什么?
  • 准确地说是下划线,但我想避免使用正则表达式!
  • 为什么要避免使用正则表达式?
  • "我想避免使用正则表达式" 为什么,这基本上是正则表达式的用途?
  • 您可以遍历字符并检查是否为(c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || z == '_',但我不明白您为什么要这样做。

标签: java validation predicate


【解决方案1】:

我将使用正则表达式来表明我对问题的理解。你想要一个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;
}

【讨论】:

  • 你可以像这样使用它:predicate.test("Your string")。你说你想要一个谓词,所以我给了你一个。你想要一个方法还是什么? @亚历克斯
  • 是的,我是 Predicates 的新手,因此我们将不胜感激!
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2010-11-13
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多