我正在尝试为数字输入编写一段验证代码。这些数字必须包含 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 //valid112345678 //无效,因为 1 重复1 2 3 4 5 6 7 8 0 //无效我所需要的只是添加一个位,它接受由空格分隔的数字!谢谢。
2 回答

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

有只小跳蛙
TA贡献1824条经验 获得超8个赞
我不确定您是否需要正则表达式。考虑使用 :Set
Scanner sc = new Scanner(System.in);
Set<Integer> set = new HashSet<>();
int count = 0;
while (count < 9) {
System.out.println("Enter a number:");
int num = sc.nextInt();
if (num >= 0 && num <= 8) {
set.add(num);
}
count++;
}
System.out.println(set.size() == 9);
或者,如果您的输入一次性出现:
String[] nums = sc.nextLine().split("\\s+");
for (String num : nums) {
set.add(Integer.parseInt(num));
}
您必须考虑检查无效输入。或者,您可以在添加到集合之前先检查是9,然后立即返回。numsfalse
添加回答
举报
0/150
提交
取消