Федеральное агентство связи
Федеральное государственное бюджетное образовательное
учреждение высшего образования
Поволжский государственный университет
телекоммуникаций и информатики
Кафедра Информационных систем и технологий
Лабораторная работа №7
По дисциплине «Инструментальные средства информационных систем»
«Использование регулярных выражений в java-приложениях»
Руководитель доцент к. т. н.
__________________ Никитин К.А.
Самара 2018
1 Задание. Используя пример из раздела 7 создать программу, которая выполняет поиск символов «abcdef12345» в вводимой из консоли строки текста.
import java.util.regex.*;//библиотека для использования Pattern и Matcher import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc =new Scanner(System.in);//создание экземпляра класса сканер String s1=sc.nextLine();// считывать строку до перевода строки Pattern p1 = Pattern.compile("[abcdef]|[12345]");// Pattern compile(String regex) – возвращает Pattern, который соответствует regex. Matcher matcher = p1.matcher(s1);//Matcher matcher(CharSequence input) – возвращает Matcher, с помощью которого можно находить соответствия в строке while (matcher.find()) { System.out.println("Найдено "+matcher.group()+" индекс "+matcher.end()); } } }
Выполнение:
2 Задание.
5 |
Определить является ли вводимая строка датой в формате dd/mm/yyyy. |
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc =new Scanner(System.in);//создание экземпляра класса сканер String s1=sc.nextLine();// считывать строку до перевода строки String pattern = "(([012]\\d|3[01])/(0[13578]|1[02])/(1[6-9]\\d{2}|[2-9]\\d{3}))|(([012]\\d|3[0])/(0[469]|11)/(1[6-9]\\d{2}|[2-9]\\d{3}))|(([01]\\d|2[0-8])/02/(1[6-9]\\d{2}|[2-9]\\d{3}))"; boolean x=s1.matches(pattern);//Метод matches() проверяет строку на соответствие регулярному выражению if(x==true){ System.out.print("Дата верна"); } else{ System.out.print("Такой даты не существует"); } /* \d [0-9] Цифра от 0 до 9 X|Y X либо Y X{n} X n раз */ } }
Выполнение:
3 Задание.
5 |
Из многострочного текста со списком цен извлечь и отдельно вывести цены в USD, RUS, EU. (Пример: 23.78 USD.) |
Код:
import java.util.regex.*; import java.util.Scanner; public class Main { public static void main(String[] args) { // проверка строки на соответствие шаблону String regexUS = "(\\W|^)(\\d+\\.)(\\w{1,2}\\s)USD(\\W|$)"; String regexRU = "(\\W|^)(\\d+\\.)(\\w{1,2}\\s)RUS(\\W|$)"; String regexEU = "(\\W|^)(\\d+\\.)(\\w{1,2}\\s)EU(\\W|$)"; String s; Scanner g = new Scanner(System.in);// экземпляр класса сканер s = g.nextLine();// считывать до энтера Pattern p1 = Pattern.compile(regexUS);//возвращает Pattern, который соответствует regex Pattern p2 = Pattern.compile(regexRU); Pattern p3 = Pattern.compile(regexEU); Matcher m1 = p1.matcher(s);//Метод matches() проверяет строку на соответствие регулярному выражению Matcher m2 = p2.matcher(s); Matcher m3 = p3.matcher(s); System.out.println("Список цен в долларах: "); while (m1.find()) { System.out.println(m1.group()); } System.out.println("Список цен в рублях: "); while (m2.find()) { System.out.println(m2.group()); } System.out.println("Список цен в евро: "); while (m3.find()) { System.out.println(m3.group()); } } } /* \W Не символ слова \d Цифра от 0 до 9 X+ X один или более раз ^ соответствует началу новой строки. Этот элемент позволяет искать с помощью регулярного выражения фразы, которые находятся в начале строки и перед которыми отсутствуют символы. $ соответствует окончанию строки. Этот элемент позволяет искать с помощью регулярного выражения фразы, которые находятся в конце строки и после которых отсутствуют символы. X{n} X n раз */
Выполнение: