java - 如何通过正则表达式判断字符串是否包含每个数字?

标签 java regex string

想知道我的字符串是否包含从 0 到 9 的每个数字。我目前正在使用以下逻辑:

if (str.contains("0") && str.contains("1") && str.contains("2") && str.contains("3") && str.contains("4") && str.contains("5") && str.contains("6") && str.contains("7") && str.contains("8") && str.contains("9"))
{
    return true;
}

我相信如果字符串太大的话这不会得到很好的优化。如何使用模式并通过正则表达式使用 String.matches 查找它是否包含所有数字?

这不是论坛中讨论“OR”相关字符模式的大多数其他正则表达式问题的重复,这里我们讨论的是“AND”。我需要一个字符串是否包含每个给定的字符(即数字)。希望它能澄清。

谢谢, 拉吉夫

最佳答案

我不会推荐使用正则表达式来完成此任务,因为它看起来不优雅。它看起来像(将鼠标悬停在上面可以看到剧透):

str.matches("(?s)(?=[^1]*1)(?=[^2]*2)(?=[^3]*3)(?=[^4]*4)(?=[^5]*5)(?=[^6]*6)(?=[^7]*7)(?=[^8]*8)(?=[^9]*9)(?=[^0]*0).*")

相反,在 Java 8 中,您可以使用

bool result = s.chars().filter(i -> i >= '0' && i <= '9').distinct().count() == 10;

它过滤所有数字( s.chars() )的字符串字符( .filter(i -> i >= '0' && i <= '9') ),仅保留唯一出现的字符( .distinct() ),然后用 .count() 检查它们的计数。如果计数等于 10,则有全部 10 个 ASCII 数字。

因此,以下代码:

String s = "1-234-56s78===90";
System.out.println(s.chars().filter(i -> i >= '0' && i <= '9').distinct().count() == 10);

prints true .

关于java - 如何通过正则表达式判断字符串是否包含每个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44583707/

相关文章:

Java:动态连接未指定数量的二维数组

java - 为什么控制台从 JTextArea (Swing) 打印错误文本

java - grails 单元测试域对象列表函数

java - 替换字符串中的反向引用语法(为什么是美元符号?)

python - 在Python中转义正则表达式unicode字符串

Java base64编码,解码产生不同的结果

c++ - QString 到 const std::string

Java - 从应用程序刷新打开的 html 页面

Python 正则表达式 : Group Backref

java - 单词末尾加号的正则表达式