如何通过正则表达式查找字符串是否包含每个数字?

时间:2017-06-16 07:47:49

标签: 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”相关的char模式,这里我们讨论的是“AND”。我需要一个字符串是否包含每个给定的字符(即数字)。希望它澄清。

谢谢, 拉吉夫

1 个答案:

答案 0 :(得分:1)

我不推荐这个任务的正则表达式,因为它看起来不优雅。它看起来像(将鼠标悬停在看到扰流板上):

  

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()),然后用{{1}检查它们的计数}。如果计数等于10,则全部有十个ASCII数字。

所以,以下代码:

.count()

prints true