[英]Regex for 9 unique digits separated by a space?
我正在尝试为数字输入编写一段验证代码。 数字必须包含0到8。顺序无所谓,但数字不能重复。
例如1 4 7 8 0 2 5 3 6 //有效1 1 3 6 3 8 0 5 4 //无效,因为重复了1
到目前为止,我有一个可容纳9个唯一数字的正则表达式:
String pattern = "^(?!.*(.).*\\1)\\d{9}";
例如123456780 //有效
112345678 //无效,因为重复了1
1 2 3 4 5 6 7 8 0 //无效
我需要做的是在要用空格隔开的数字处添加位!
谢谢。
这确实是对正则表达式的滥用:D但是
^(?!.*(\d).*\1)(?:[0-8] ){8}[0-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));
}
您将不得不考虑检查无效输入。 或者,您可以先检查nums
是否为9,然后再添加到set中并返回false
然后立即返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.