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 .