Рубрики
Без рубрики

Сканер на основе регулярных выражений Java

Я часто использую встроенный в java java.util. Сканер для извлечения информации из потоков строк,… Помеченный java, регулярным выражением, строкой.

Я часто использую встроенный в java java.util. Scanner для получения информации из потоков строк, но чего я не смог сделать, так это извлечь некоторые токены, соответствующие предопределенному регулярному выражению, а затем использовать последовательность символов до конца. В примере встроенного сканера java регулярное выражение используется только для определения разделителей, например, токены разделяются пробелами, скажем , \t или \n . Я не мог сказать ему, чтобы он извлекал четко определенную информацию, например 123a4567-e89b-12d3-a456-123442445670 , особенно когда она находится внутри текста, смешанного с некоторыми другими токенами. Все, что мне нужно сделать сейчас, это предоставить пример регулярного выражения, и я получу все соответствующие токены из заданного текста.

@Test
    public void testUUID() {
        final String regex = "[0-9abcdef]{8}(-[0-9abcdef]{4}){3}-[0-9abcdef]{12}";
        final String text = "uuid : 6d0a3538-9760-41ae-965d-7aad70021f81\n" +
                "uuid : d7d97fb3-3676-4109-9a94-7acc5f593ace\n" +
                "uuid : 02e87dd3-10ff-43cf-9572-bd9d151bb439\n" +
                "uuid : 632a4c31-8dfe-43a3-8f8d-15b472292cc9";

        final List expectedUUIDs = Arrays.asList("6d0a3538-9760-41ae-965d-7aad70021f81",
                "d7d97fb3-3676-4109-9a94-7acc5f593ace",
                "02e87dd3-10ff-43cf-9572-bd9d151bb439",
                "632a4c31-8dfe-43a3-8f8d-15b472292cc9");

        final List foundUUIDs = new ArrayList<>();
        final RegexScanner regexScanner = new RegexScanner(text, regex);
        while (regexScanner.hasNext()) {
            foundUUIDs.add(regexScanner.next());
        }
        Assert.assertArrayEquals(expectedUUIDs.toArray(), foundUUIDs.toArray());
    }

Таким образом, сканер используется циклом while до тех пор, пока не будет достигнут конец, что означает, что все токены считываются и обрабатываются.

Можно также предоставить функцию, которая сопоставляет найденный токен с другим объектом, используя метод next(Function ,R> mapper) . ,R> mapper)

Код доступен на github по этой ссылке .

Оригинал: “https://dev.to/mustabelmo/java-regex-based-scanner-4g5”