我必须列出3个给定数字中所有可能的4位数字组合。
每个数字至少应使用一次。如果数字为(1,2,4),则选项1122无效,因为它不使用数字4。
我那丑陋的代码看起来像这样:

String s="";
for(int i=1000;i<5000;i++){
   s=String.valueOf(i);
   if(s.contains("1")&&s.contains("2")&&s.contains("4")
          &&!s.contains("3")&&!s.contains("5")&&!s.contains("6")&&!s.contains("7")
          &&!s.contains("8")&&!s.contains("9")&&!s.contains("0")){
   System.out.println(s);
   }
}


它列出了36种组合,这是正确的答案。

您能建议我一个能代替该条件工作的正则表达式吗?

最佳答案

以下正则表达式将使用lookaheads测试您的数字是否为4位数字,由1、2和4组成,且每个数字至少出现一次:

^(?=.*1)(?=.*2)(?=.*4)[124]{4}$


不使用前行的解决方案是可能的,但也非常无趣,因为您将必须列出每个排列的第三个(您只能获得描述一个特定位置可以包含三个符号之一的机会)。

正如其他人所说,将此正则表达式与当前代码一起使用仍然是生成所需排列的非常低效的方法。

关于java - 正则表达式重复排列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44744835/

10-15 16:18