|
Министерство образования и науки Российской Федерации Калужский филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Московский государственный технический университет имени Н.Э. Баумана» (КФ МГТУ им. Н.Э. Баумана) |
ФАКУЛЬТЕТ |
"Фундаментальные науки" |
КАФЕДРА |
"Программное обеспечение ЭВМ, информационные технологии и прикладная математика" |
О Т Ч Е Т
Лабораторная работа №2
ДИСЦИПЛИНА: |
"Основы научных исследований" |
||
ТЕМА: |
"Основные конструкции языка Java"
|
Выполнил: студент гр. ИТД.Б-61 |
Родин С.Е. ______________________
|
Проверил: |
Димитрюк О.В.__________________ |
Дата сдачи (защиты) лабораторной работы: |
|
|
Результаты сдачи (защиты): Количество рейтинговых баллов |
|
|
Оценка |
|
Калуга, 2014 г.
Цель
Изучить основы работы с массивами, строками, регулярными выражениями,
файлами и коллекциями, механизмы обработки исключений в языке Java.
Ознакомиться с описанием классов, их полей и методов.
Задание
Вариант 2
1. Необходимо реализовать консольное приложение, позволяющее манипулировать строкой, разбив ее на элементы путем использования регулярных выражений.
Определить, является ли строка правильным URL адресом. В данной задаче правильным URL считаются адреса http и https, явное указание протокола также может отсутствовать. Учитываются только адреса, состоящие из символов (не учитывать IP адреса).
2. Ввести число, занести его цифры в стек. Вывести в число, у которого цифры идут в обратном порядке и записать результат в заданный пользователем файл.
3. Создать класс с указанной структурой (все поля должны быть закрытыми). Определить конструктор, открытые методы set(), get() для каждого поля и метод show(). Определить какой-либо дополнительный метод класса. Создать массив из n объектов данного класса. Вывести данные, удовлетворяющие заданному критерию.
АБИТУРИЕНТ: фамилия, имя, отчество, адрес, телефон, оценки.
Вывести список абитуриентов с оценками выше средней. Предусмотреть как краткий вариант вывода информации (фамилия и.о.), так и полный.
Теоретические сведения
Регулярные выражения (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов. По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.
Основой синтаксиса регулярных выражений является тот факт, что некоторые символы встречающиеся в строке рассматриваются не как обычные символы, а как имеющие специальное значение (т.н. метасимволы). Именно это решение позволяет работать всему механизму регулярных выражений. Каждый метасимвол имеет свою собственную роль.
^ - (крышка, цирркумфлекс) начало проверяемой строки
$ - (доллар) конец проверяемой строки
. - (точка) представляет собой сокращенную форму записи для символьного класса, совпадающего с любым символом
| - означает «или». Подвыражения, объединенные этим способом, называются альтернативами (alternatives)
? - (знак вопроса) означает, что предшествующий ему символ является необязательным
+ - обозначает «один или несколько экземпляров непосредственно предшествующего элемента
* – любое количество экземпляров элемента (в том числе и нулевое)
\\d – цифровой символ
\\D – не цифровой символ
\\s – пробельный символ
\\S – не пробельный символ
\\w – буквенный или цифровой символ или знак подчёркивания
\\W – любой символ, кроме буквенного или цифрового символа или знака подчёркивания
Регулярные выражения предоставляют инструменты позволяющие указать сколько раз может повторятся один или несколько символов. С некоторыми мы уже встречались:
+ - Одно или более
* - Ноль или более
? - Ноль или одно
{n} - Ровно n раз
{m,n} - От m до n включительно
{m,} - Не менее m
{,n} - Не более n
Class Pattern - Регулярное выражение, которое Вы записываете в строке, должно сначала быть скомпилированным в объект данного класса. После компиляции объект этого класса может быть использован для создания объекта Matcher.
В классе Pattern объявлены следующие методы:
Pattern compile(String regex) – возвращает Pattern, который соответствует regex.
Matcher matcher(CharSequence input) – возвращает Matcher, с помощью которого можно находить соответствия в строке input.
Class Matcher
Объект Matcher анализирует строку, начиная с 0, и ищет соответствие шаблону.
После завершения этого процесса Matcher содержит много информации о найденных (или не найденных) соответствиях в нашей входной строке. Мы можем получить эту информацию, вызывая различные методы нашего объекта Matcher:
boolean matches() просто указывает, соответствует ли вся входная последовательность шаблону.
int start() указывает значение индекса в строке, где начинается соответствующая шаблону строка.
int end() указывает значение индекса в строке, где заканчивается соответствующая шаблону строка плюс единица.
String group() - возвращает найденную строку
String group(int group) - если у Вас в регулярном выражении были группы, то можно вывести только кусочек строки соответствующей определенной группе.
Для работы с файловой системой у Java имеется специальный класс File, который располагается в java.io пакете.
Результаты работы программы
Задание 1
Enter string:
http:/ex.com
String is right URL.
Enter string:
:/5368.com
String isn't right URL.
Задание 2
Enter number:
12345
Enter file name:
f1
f1:
54321
Задание 3
Enter count of enrollee: 3 New enrollee: Enter second name: enrollee1 Enter first name: en1 Enter middle name: e1 Enter address: gfddh Enter phone number: 432346 Enter 1 mark: 5 Enter 2 mark: 4 Enter 3 mark: 4
|
New enrollee: Enter second name: enrolle2 Enter first name: en2 Enter middle name: e2 Enter address: hfkhfk Enter phone number: 567686 Enter 1 mark: 4 Enter 2 mark: 4 Enter 3 mark: 3 New enrollee: Enter second name: enrollee3 Enter first name: en3 |
Enter middle name: e3 Enter address: tfrukgljgkj Enter phone number: 9870987 Enter 1 mark: 5 Enter 2 mark: 4 Enter 3 mark: 3 Enrollee enrollee1 en1 e1 Average mark: 4.333333333333333 Enrollee enrolle2 en2 e2 Average mark: 3.6666666666666665 Enrollee enrollee3 en3 e3 Average mark: 4.0
|
Листинги
Задание 1
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by kateairmac on 11.04.14.
*/
public class Lab2_ex1 {
private static String GetString(String message){
System.out.println(message);
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
return string;
}
/** необязательный протокол (http:// или https://),
* затем последовательность не цифр (домены уровня > 1),
* потом домен нулевого уровня (от 2 до 6 букв и точек)
* файловая структура — набор слов из букв, цифр, дефисов, подчёркиваний и точек со слэшем в конце или без.
*/
private static boolean CheckString(String string) {
Pattern patternURL = Pattern.compile("(https?:\\/\\/)?([\\D\\.]+)\\.([a-z]{2,6}\\.?)(\\/[\\w\\.]*)*\\/?");
Matcher matcherURL = patternURL.matcher(string);
return matcherURL.matches();
}
public static void main(String[] args) {
String string = GetString("Enter string: ");
if(CheckString(string)){
System.out.println("String is right URL.");
}
else {
System.out.println("String isn't right URL.");
}
}
}