Regex для 9 уникальных цифр, разделенных пробелом? - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь написать кусок проверочного кода для ввода чисел.Числа должны содержать от 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 // недействительно

Все, что мне нужно, это добавить бит, где он принимает, в цифрах, разделенных пробелом!

Спасибо.

Ответы [ 2 ]

3 голосов
/ 28 марта 2019

Это действительно злоупотребление регулярным выражением: D, но

^(?!.*(\d).*\1)(?:[0-8] ){8}[0-8]$

должно это сделать.Убедитесь, что в той части, где вы запрещаете повторение, учитываются только цифры;тогда у вас может быть восемь пар цифр-пробелов, за которыми следует цифра в конце (с правильными цифрами).

2 голосов
/ 28 марта 2019

Я не уверен, что вам нужно регулярное выражение для этого. Попробуйте использовать 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, а затем сразу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...