Перейти к основному содержимому

Создание массива Java из совпадений регулярных выражений

· 3 мин. чтения

1. Обзор

В этом руководстве мы узнаем, как создать массив из выходных данных регулярного выражения ( regex ).

2. Введение

Для нашего примера давайте разберем длинную строку. Мы найдем шаблоны с 10-значными телефонными номерами. Затем мы получим вывод, сгенерированный в виде массива.

Oracle предоставила пакет java.util.regex для реализации регулярных выражений. Мы будем использовать классы, доступные в этом пакете, для нашей демонстрации. Как только мы найдем наши совпадения, мы возьмем этот вывод и создадим массив.

Массивы — это переменные фиксированного размера. Мы должны объявить их размер перед их использованием. Существует также вероятность потери памяти, если массивы реализованы неправильно. По этой причине мы начинаем со списка , а затем динамически преобразуем список в массив.

3. Реализация

Давайте рассмотрим наши коды, чтобы шаг за шагом реализовать это решение. Для начала давайте создадим ArrayList для хранения совпадений:

List<String> matchesList = new ArrayList<String>();

Мы будем хранить длинную строку со встроенными в нее телефонными номерами следующим образом:

String stringToSearch =
"7801111111blahblah 780222222 mumbojumbo7803333333 thisnthat 7804444444";

Мы используем метод compile() , статический фабричный метод в классе Pattern . Он возвращает эквивалентный объект Pattern регулярного выражения:

Pattern p1 = Pattern.compile("780{1}\\d{7}");

Когда у нас есть объект Pattern , мы создаем объект Matcher , используя метод matcher() :

Matcher m1 = p1.matcher(stringToSearch);

Здесь мы можем использовать метод find() из класса Matcher, который возвращает логическое значение , если совпадение найдено:

while (m1.find()) {
matchesList.add(m1.group());
}

Метод group() , который мы только что использовали, относится к классу Matcher . Он создает строку , представляющую совпадающий шаблон.

Чтобы преобразовать MatchList в массив, мы находим количество совпадающих элементов. Затем мы используем его при создании нового массива для хранения результатов:

int sizeOfNewArray = matchesList.size(); 
String newArrayOfMatches[] = new String[sizeOfNewArray];
matchesList.toArray(newArrayOfMatches);

Давайте теперь посмотрим, как работает наш код, на нескольких примерах. Если мы передаем строку с четырьмя совпадающими шаблонами, наш код создает новый массив строк с этими четырьмя совпадениями:

RegexMatches rm = new RegexMatches();
String actual[] = rm.regexMatch("7801111211fsdafasdfa 7802222222 sadfsadfsda7803333333 sadfdasfasd 7804444444");

assertArrayEquals(new String[] {"7801111211", "7802222222", "7803333333", "7804444444"}, actual, "success");

Если мы передаем строку без совпадений, мы получаем пустой массив строк :

String actual[] = rm.regexMatch("78011111fsdafasdfa  780222222  sadfsadfsda78033333 sadfdasfasd 7804444");

assertArrayEquals(new String[] {}, actual, "success");

4. Вывод

В этом уроке мы узнали, как искать шаблоны в строке текста в Java. Мы также нашли способ перечислить результаты в массиве.

Исходный код доступен на GitHub .