想要查找我的字符串是否包含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”。我需要一个字符串是否包含每个给定的字符(即数字)。希望它澄清。
谢谢, 拉吉夫
答案 0 :(得分:1)
我不推荐这个任务的正则表达式,因为它看起来不优雅。它看起来像(将鼠标悬停在看到扰流板上):
相反,在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()