正则表达式用于由空格分隔的9个唯一数字?

我正在尝试为数字输入编写一段验证代码。这些数字必须包含 0 到 8。顺序无关紧要,但数字不能重复。

例如 1 4 7 8 0 2 5 3 6 //valid 1 1 3 6 3 8 0 5 4 //无效,因为 1 重复

到目前为止,我有一个正则表达式,它接受9个唯一的数字:

 String pattern = "^(?!.*(.).*\\1)\\d{9}";

例如 123456780 //valid

112345678 //无效,因为 1 重复

1 2 3 4 5 6 7 8 0 //无效

我所需要的只是添加一个位,它接受由空格分隔的数字!

谢谢。


慕妹3242003
浏览 116回答 2
2回答

白衣非少年

这实际上是滥用正则表达式:D但^(?!.*(\d).*\1)(?:[0-8] ){8}[0-8]$应该这样做。确保在不允许重复的部分只考虑数字;然后,您可以有八个数字空间对,后跟一个数字在末尾(带有正确的数字)。

有只小跳蛙

我不确定您是否需要正则表达式。考虑使用 :SetScanner sc = new Scanner(System.in);Set<Integer> set = new HashSet<>();int count = 0;while (count < 9) {&nbsp; &nbsp; System.out.println("Enter a number:");&nbsp; &nbsp; int num = sc.nextInt();&nbsp; &nbsp; if (num >= 0 && num <= 8) {&nbsp; &nbsp; &nbsp; &nbsp; set.add(num);&nbsp; &nbsp; }&nbsp; &nbsp; count++;}System.out.println(set.size() == 9);或者,如果您的输入一次性出现:String[] nums = sc.nextLine().split("\\s+");for (String num : nums) {&nbsp; &nbsp; set.add(Integer.parseInt(num));}您必须考虑检查无效输入。或者,您可以在添加到集合之前先检查是9,然后立即返回。numsfalse
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java