1 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing.

Презентация:



Advertisements
Похожие презентации
СТРОКИ Работа со строками. Последовательность выполнения операторов int age = 45; String s = "Не is " + age + " years old."; age не String, а переменная.
Advertisements

ЛАБОРАТОРНАЯ РАБОТА 1 ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ ТАБЛИЦ, ИСПОЛЬЗУЕМЫХ В ТРАНСЛЯТОРЕ Рейн Т. С.
Java in pictures. Типы данных Примитивы: boolean, byte (8) char, short,(16) int, float,(32) long,double(64) Ссылочные типы Классы Интерфейсы Массивы enum.
Коллекции классов Лекция 12. С помощью коллекций вместо создания структур данных программист использует готовые структуры данных, не заботясь об их реализации.
АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.
Операции Условная операция ? : Если истинно, то результатом будет, иначе. Например, int x = a < b ? a : b вычисляет минимум из a и b.
Java. Part 2. Спецификаторы доступа public private protected не указан – доступ в пределах пакета Могут использоваться перед классами, методами, полями.
Часть 1. Основы ООП Объекты и инкапсуляция..
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Лекция 30. Преобразования типов в C++ Красс Александр СПбГУ ИТМО, 2009.
Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
Переменные, величины Переменные, величины Типы, имена переменных Типы, имена переменных Хранение величин Хранение величин Переменные, величины Переменные,
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Тема урока Переменная. Тип данных. Ввод и вывод данных.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
План-конспект урока (информатика и икт, 9 класс) по теме: Переменные:тип, имя, значение
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
1 © Luxoft Training 2013 Модуль 7 Введение Исследование классов 7-1 Механизм Reflection.
Транксрипт:

1 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property-файлами 1-1 Ключевые классы системной библиотеки

2 © Luxoft Training 2013 Классы системной библиотеки API (Application Programming Interface) платформы Java 2 содержит большое количество классов Все они разбиты по пакетам, а пакеты объединяются в более крупные модули, решающие те или иные задачи платформы 1-2 Введение

3 © Luxoft Training 2013 Классы системной библиотеки Так пакет java.util содержит классы Collections Framework Набор пакетов java.awt служат для работы с графической библиотекой Так же имеется набор классов, решающих самые разные утилитные задачи программирования, и используемые достаточно часто Будем называть эти классы - ключевыми 1-3 Введение

4 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property-файлами 1-4 Ключевые классы системной библиотеки

5 © Luxoft Training 2013 Классы системной библиотеки Класс java.lang.System предоставляет следующие полезные статические методы: arraycopy() gc() currentTimeMillis() getProperties() 1-5 Класс System

6 © Luxoft Training 2013 Классы системной библиотеки Метод System.arraycopy( Object src, int srcPos, Object dest, int destPos, int length) осуществляет копирование из исходного массива ( src ) в заданный массив ( dest ), начиная с заданной позиции ( srcPos ), в заданную позицию ( destPos ) необходимое количество элементов ( length ) 1-6 Метод System.arraycopy()

7 © Luxoft Training 2013 Метод System.arraycopy() Классы системной библиотеки System.arraycopy( Object src, int fromStart, Object dest, int toStart, int count) src dest

8 © Luxoft Training 2013 Классы системной библиотеки Объекты src и dest должны представлять массивы и не должны быть null, все индексы должны иметь корректное значение Копируются значения массива: в случае примитивов, создается копия примитива, в случае объекта, создается копия ссылки 1-8 Класс System.arraycopy()

9 © Luxoft Training 2013 Вставка элемента в массив

10 © Luxoft Training 2013 Удаление элемента из массива

11 © Luxoft Training )Создадим второй, больший массив double[] newData = new double[2 * data.length]; 2) Копируем все элементы: arraySystem.arraycopy( data, 0, newData, 0, data.length); 3) Заменяем ссылку на новый массив в старый массив data = newData; Расширение массива

12 © Luxoft Training 2013 Пример: ArrayCopyTutor Классы системной библиотеки Метод System.arraycopy()

13 © Luxoft Training 2013 Классы системной библиотеки Метод System.gc() делает подсказку JVM, что необходимо вызвать работу Garbage Collector для сбора объектов, не имеющих внешних ссылок Метод не гарантирует вызов GC Метод эквивалентен: Runtime.getRuntime().gc() 1-13 Класс System.gc()

14 © Luxoft Training 2013 Классы системной библиотеки Метод System.currentTimeMills() возвращает текущее системное время в миллисекундах (типа long) Принято отсчитывать время в миллисекундах от 1 января 1970 года во временной зоне по Гринвичу (UTC) 1-14 Класс System.currentTimeMills()

15 © Luxoft Training 2013 Пример: SystemCurrentTimeTutor Классы системной библиотеки Класс System.currentTimeMills()

16 © Luxoft Training 2013 Классы системной библиотеки Класс java.util.Date имеет конструктор, принимающий количество миллисекунд, и может использоваться для последующей работы (форматирования) текущего системного времени 1-16 Класс System.currentTimeMills()

17 © Luxoft Training 2013 Классы системной библиотеки Класс Math содержит ряд математических методов и две константы для поддержки математических операций Данный класс финальный, все его методы - статические 1-17 Класс Math

18 © Luxoft Training 2013 Классы системной библиотеки 1-18 Методы класса Math

19 © Luxoft Training 2013 Классы системной библиотеки 1-19 Методы класса Math

20 © Luxoft Training 2013 Классы системной библиотеки 1-20 Методы класса Math

21 © Luxoft Training 2013 Пример: MathTutor Классы системной библиотеки Методы класса Math

22 © Luxoft Training 2013 Класс Object Класс Object является корневым для всех классов Java Класс Object реализует методы, имеющие определенное поведение и семантику. Наследники могут переопределить методы, не меняя семантику 1-22 Основные методы

23 © Luxoft Training 2013 Класс Object Метод toString() класса Object используется для получения строкового представления объекта По умолчанию метод печатает ссылку объекта – малоценная информация: 1-23 Object.toString()

24 © Luxoft Training 2013 Класс Object Наследник может переопределить метод toString() и возвращать строку, представляющую внутреннее состояние объекта: 1-24 Object.toString()

25 © Luxoft Training 2013 Класс Object 1-25 Object.toString(). Пример

26 © Luxoft Training 2013 Пример: ObjectToStringTutor Класс Object

27 © Luxoft Training 2013 Класс Object Оператор == сравнивает два значения на эквивалентность Эквивалентность двух примитивов – это равенство их значений: 1-27 Метод equals()

28 © Luxoft Training 2013 Класс Object Эквивалентность двух ссылок – проверка того, что эти ссылки ссылаются на один и тот же объект в куче: 1-28 Метод equals()

29 © Luxoft Training 2013 Класс Object Однако, часто встает необходимость сравнить объекты по их внутреннему значению, а не по значению ссылок Например, Collections Framework ведет все операции сравнения, используя нотацию равенства данных объекта: 1-29 Метод equals()

30 © Luxoft Training 2013 Класс Object 1-30 Метод equals()

31 © Luxoft Training 2013 Класс Object Метод public boolean equals(Object o) класса Object должен возвращать true, если данный объект равен o, и false в противном случае Реализация класса метода класса Object работает как оператор == Подкласс может переопределить это поведение 1-31 Метод equals()

32 © Luxoft Training 2013 Класс Object Метод equals()

33 © Luxoft Training 2013 Класс Object 1-33 Метод equals()

34 © Luxoft Training 2013 Класс Object 1-34 Свойства метода equals() Симметричность. Если для каких-либо объектов x и y x.equals(y) возвращает true, то и y.equals(x) должен возвращать true. Рефлексивность. Для любого объекта x x.equals(x) должен возвращать true. Постоянство. Для любых объектов x и y x.equals(y) возвращает одно и тоже, если информация, используемая в сравнениях, не меняется. Транзитивность. Для любых объектов x, y и z, если x.equals(y) вернет true и y.equals(z) вернет true, то и x.equals(z) должен вернуть true. Для любого не null объекта x x.equals(null) должен возвращать false.

35 © Luxoft Training 2013 Класс Object Хеширование преобразование входного массива данных произвольной длины в выходную строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем, хеш- кодом или сводкой сообщения

36 © Luxoft Training 2013 Класс Object Хеш-таблица Хеш-таблица структура данных, реализующая интерфейс ассоциативного массива, а именно, позволяющая хранить пары (ключ, значение) и выполнять три операции: - операцию добавления новой пары map.put(key, value) - операцию поиска value = map.get(key) - операцию удаления пары по ключу map.remove(key) key value hash

37 © Luxoft Training 2013 Класс Object Хранение данных в хэш-таблице Коллизией хеш-функции называется ситуация, когда для различных ключей получается одно и то же хеш-значение, т.е. hash(x) = hash(y) Разрешение коллизий Каждая ячейка массива H является указателем на связный список пар ключ-значение, соответствующих одному и тому же хеш-значению ключа. Коллизии просто приводят к тому, что появляются цепочки длиной более одного элемента.

38 © Luxoft Training 2013 Идеальной хеш-функцией (англ. Perfect hash function) называется такая функция, которая отображает каждый ключ из набора в множество целых чисел без коллизий. В среднемВ худшем случае Расход памятиO(n) ПоискO(1)O(n) ВставкаO(1)O(n) УдалениеO(1)O(n) Хэш-таблица Класс Object Метрики работы с хеш-таблицей, в зависимости от качества используемой хеш-функции:

39 © Luxoft Training 2013 Класс Object Метод public int hashCode() класса Object призван дать численный эквивалент объекту. Часто в задачах сортировки, хеш- структурах, требуется данный эквивалент для более быстрой навигации к серии объектов Из равенства объектов (метод equals() ) должно следовать равенство их хэш-кодов 1-39 Метод hashCode()

40 © Luxoft Training 2013 Класс Object Объекты с равными хэш-кодами могут, в общем случае, быть не равны Однако, лучше, если хэш-коды распределены равномерно hashCode() должен возвращать одно и то же значение в течение всего времени жизни объекта 1-40 Метод hashCode()

41 © Luxoft Training 2013 Класс Object Метод hashCode() класса Object возвращает хеш-код, основанный на адресе объекта в памяти Поэтому, если метод equals() переопределен, а hashCode() – нет, то для двух равных экземпляров метод hashCode() будет выдавать разные значения 1-41 Метод hashCode()

42 © Luxoft Training 2013 Класс Object Поэтому необходимо переопределять оба метода hashCode() и equals() одновременно: 1-42 Метод hashCode()

43 © Luxoft Training 2013 Класс Object Почему используется число 31? 31 – простое нечетное число Если произойдет переполнение при умножении на 2, информация не потеряется Это традиция 31 * i == (i << 5) - i - таким образом, его удобно вычислять (современные ВМ делают эту оптимизацию автоматически) 1-43 Метод hashCode()

44 © Luxoft Training 2013 Класс Object А что будет, если определить hashCode() так? Метод hashCode()

45 © Luxoft Training 2013 Класс Object Метод hashCode()

46 © Luxoft Training 2013 Класс Object Метод equals() и hashCode() Всякий раз, когда метод вызывается у одного и того же объекта во время выполнения приложения, он должен возвращать одно и то же число, если используемая информация не изменяется. hashCode() может возвращать разные значения для идентичных объектов в различных экземплярах приложения. Если два объекта равны согласно equals(), то их hashCode() должны возвращать одинаковые значения. Обратное требование необязательно. Два неравных объекта могут возвращать одинаковый hashCode(). Однако для повышения производительности, лучше, чтобы разные объекты возвращали разные коды.

47 © Luxoft Training ) Присвойте переменной result (тип int) некоторое ненулевое число, скажем, 17. 2) Для каждого значимого поля f в вашем объекте (т. е. поля, значение которого принимается в расчет методом equals), выполните следующее: Если поле имеет тип boolean, вычислите (f ? 1 : 0). Если поле имеет тип byte, char, short или int, вычислите (int) f. Если поле имеет тип long, вычислите (int)(f ^ (f >>> 32)). Если поле имеет тип float, вычислите Float.floatToIntBits(f). Если – тип double, вычислите Double.doubleToLongBits(f) Если поле является ссылкой на объект, рекурсивно вызывайте для этого поля метод hashCode(). Класс Object Алгоритм написания hashCode()

48 © Luxoft Training 2013 Класс Object Алгоритм написания hashCode() Если значение поля равно null, возвращайте 0 (можно любую другую константу, но традиционно используется 0). Если поле является массивом, вычислите хэш-код для каждого значимого элемента, рекурсивно применяя данные правила, а затем объедините полученные значения как в п.3. 3) Объедините хэш-код с, вычисленный на этапе а, с текущим значением поля result следующим образом: result = 37*result + с; 4) Верните значение result. 5) Закончив писать метод hashCode(), спросите себя, имеют ли равные экземпляры одинаковый хэш-код. Если нет, выясните, в чем причина, и устраните проблему.

49 © Luxoft Training 2013 Пример: ObjectEqualsTutor Класс Object Метод equals() и hashCode()

50 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property-файлами 1-50 Ключевые классы системной библиотеки

51 © Luxoft Training 2013 Строки В Java используется Unicode 16 для представления одного символа. Строка – это набор символов Класс String представляет неизменяемые (immutable) строки. Однажды созданный объект класса String не может изменить строку, которую он представляет 1-51 Введение

52 © Luxoft Training 2013 Строки Класс String можно создать через конструктор: String s1 = new String(Hello); Либо литералом: String s2 = Hello Каждая строка, заданная литералом (через ), помещается в специальный пул JVM 1-52 Создание строки

53 © Luxoft Training 2013 Строки Когда компилятор встречает одинаковое литеральное задание строки в коде программы, он не создает новую копию, а использует эквивалентную строку из пула: 1-53 Создание строки

54 © Luxoft Training 2013 Строки Однако и: Т.к.: 1-54 Строки, заданные литералами

55 © Luxoft Training 2013 Строки Однако, при конструировании строки с помощью конструктора, явно создается новый объект: 1-55 Создание строки

56 © Luxoft Training 2013 Строки Поэтому практически всегда запись new String(sss) не оправдана 1-56 Создание строк: вывод

57 © Luxoft Training 2013 Строки 1-57 Методы класса String

58 © Luxoft Training 2013 Строки 1-58 Методы класса String

59 © Luxoft Training 2013 Строки В примере: Его графическая иллюстрация: 1-59 Методы класса String

60 © Luxoft Training 2013 Пример: StringTutor Строки Методы класса String

61 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property-файлами 1-61 Ключевые классы системной библиотеки

62 © Luxoft Training 2013 StringBuffer и StringBuilder StringBuffer и StringBuilder – классы, позволяющие динамически модифицировать строку, без создания промежуточных объектов Конструкторы: StringBuffer() StringBuffer(int capacity) StringBuffer(String initialString) 1-62 Введение

63 © Luxoft Training 2013 StringBuffer и StringBuilder 1-63 Методы класса StringBuffer

64 © Luxoft Training 2013 StringBuffer и StringBuilder 1-64 Методы класса StringBuffer. Пример

65 © Luxoft Training 2013 StringBuffer и StringBuilder Класс StringBuffer не переопределяет метод equals(), поэтому не следует ожидать сравнения внутреннего представления Метод toString() возвращает инкапсулированную строку 1-65 Методы класса StringBuffer

66 © Luxoft Training 2013 StringBuffer и StringBuilder Класс StringBuffer не является threadsafe, т.е. все его методы – синхронизированы В общем виде, работа методов такого класса в однопоточной программе приводит к ненужным задержкам 1-66 Класс StringBuilder

67 © Luxoft Training 2013 StringBuffer и StringBuilder Класс StringBuilder практически полностью дублирует функционал StringBuffer, но все его методы не синхронизированы 1-67 Класс StringBuilder

68 © Luxoft Training 2013 Строки Строки можно добавлять, используя оператор конкатенации: a + b + c Это эквивалентно: StringBuffer().append(a). append(b).append(c).toString() Т.о. промежуточные объекты не создаются 1-68 Конкатенация строк

69 © Luxoft Training 2013 Пример: StringBuilderTutor Строки Конкатенация строк

70 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property-файлами 1-70 Ключевые классы системной библиотеки

71 © Luxoft Training 2013 Обертки поверх примитивов Каждый примитивный тип Java имеет соответствующий класс обертку (wrapper class) Wrapper class – это простой класс, который инкапсулирует единственное, неизменяемое (immutable) значение Например, класс Integer оборачивает значение типа int 1-71 Введение

72 © Luxoft Training 2013 Обертки поверх примитивов 1-72 Введение

73 © Luxoft Training 2013 Обертки поверх примитивов 1-73 Введение

74 © Luxoft Training 2013 Обертки поверх примитивов Класс-обертка создается путем передачи примитива в конструктор: 1-74 Создание

75 © Luxoft Training 2013 Обертки поверх примитивов 1-75 Создание

76 © Luxoft Training 2013 Обертки поверх примитивов Все классы-обертки, кроме Character, имеют альтернативный способ создания: с помощью конструктора, принимающего строку в качестве аргумента При этом может возбудиться NumberFormatException 1-76 Создание с помощью строки

77 © Luxoft Training 2013 Обертки поверх примитивов 1-77 Создание с помощью строки

78 © Luxoft Training 2013 Обертки поверх примитивов После создания объекта-обертки его можно сравнивать: 1-78 Сравнение примитивов

79 © Luxoft Training 2013 Обертки поверх примитивов Из объекта-обертки можно получить его примитивное значение Все обертки, кроме Character, расширяют класс Number, предоставляющий методы: 1-79 Получение примитивного значения

80 © Luxoft Training 2013 Пример: NumbersTutor Обертки поверх примитивов

81 © Luxoft Training 2013 Обертки поверх примитивов Класс-оболочка удобен, когда необходимо трактовать примитив как объект Метод List.add() ожидает объект: 1-81 Использование

82 © Luxoft Training 2013 Обертки поверх примитивов Классы-обертки содержат ряд полезных методов, позволяющих: Получить примитив из строки Производить арифметические сравнения значения с бесконечностью Приводить значение к строке 1-82 Другие полезные методы

83 © Luxoft Training 2013 Обертки поверх примитивов Серия методов Wrapper.valueOf() позволяет получить объект-оболочку из строки Серия методов Wrapper.parseXXX() позволяет получить соответствующее примитивное значение из строки 1-83 Другие полезные методы

84 © Luxoft Training 2013 Обертки поверх примитивов При целочисленном делении на ноль возбуждается ArithmethicException Никакие другие операции не приводят к исключениям Операции над вещественными операндами могут приводить к выходу за пределы массива ( +- бесконечность) и к значению Not a Number (NaN) 1-84 Арифметические ошибки

85 © Luxoft Training 2013 Обертки поверх примитивов Классы Double и Float содержат константы NAN, NEGATIVE_INFINITY, POSITIVE_INFINITY Целочисленные операции могут приводить к overflow, в случае чего отбрасываются старшие биты битового паттерна результата 1-85 Арифметические ошибки

86 © Luxoft Training 2013 Обертки поверх примитивов Для того, чтобы проверит, является ли результат операции NaN нельзя использовать x<Float.NaN и т.п. Необходимо воспользоваться методом Double.isNaN(double) 1-86 Арифметические ошибки

87 © Luxoft Training 2013 Обертки поверх примитивов 1-87 Арифметические ошибки. Пример

88 © Luxoft Training 2013 Обертки поверх примитивов Все объекты-оболочки реализуют метод toString() Integer и Long предоставляют методы toBinaryString(), toOctalString(), toHexString(), возвращающие строковое представление числа по основанию 2, 8, Другие полезные методы

89 © Luxoft Training 2013 Пример: OverflowTutor Обертки поверх примитивов

90 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property-файлами 1-90 Ключевые классы системной библиотеки

91 © Luxoft Training 2013 Обертки поверх примитивов В Java 5.0 добавились механизмы автоматической конвертации из примитива в объект-оболочку (autoboxing) и обратно (auto-unboxing) Integer wrappedInt = 25; Компилятор выполняет: Integer wrappedInt = new Integer(25) 1-91 Autoboxing

92 © Luxoft Training 2013 Обертки поверх примитивов Тип объекта-обертки и примитива должны совпадать, иначе возникает ошибка компиляции: 1-92 Autoboxing

93 © Luxoft Training 2013 Обертки поверх примитивов Auto-unboxing: 1-93 Auto-unboxing

94 © Luxoft Training 2013 Обертки поверх примитивов Необходимо понимать, что при auto-boxing создается новый объект, который должен будет удалиться garbage collector. Это может снижать производительность: 1-94 Auto-boxing

95 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property-файлами 1-95 Ключевые классы системной библиотеки

96 © Luxoft Training 2013 Регулярные выражения Начиная с версии Java 1.4, появился пакет java.util.regex и реализация парсера регулярных выражений Регулярные выражения – формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов 1-96 Введение

97 © Luxoft Training 2013 Регулярные выражения используются некоторыми текстовыми редакторами и утилитами для поиска и подстановки текста. Зачем нужны регулярные выражения? Проверка на соответствие строки шаблону (поиск) Пример: проверка, является ли строка телефоном или , в целях валидации Поиск и замена Пример: замена по всему тексту одного имени на другое Вычленение нужного куска данных из текста Пример: анализ пути к файлу c:\folder\file.txt и выделение названия файла, расширения и названия папки Регулярные выражения

98 © Luxoft Training 2013 Регулярное выражение Описание.Любой символ ^regexregex должна начинаться в начале строки regex$Ищет строку, заканчивающуюся на regex [abc]Может быть любой символ: a, b или c [abc][vz]Символ a, и или c, за которым следует символ v или z [^abc]Любой символ кроме a, b и c. [a-d1-7]Диапазон любых символов: a, b, c, d, 1, 2, 3, 4, 5, 6, 7 X|ZСимовол X или Y XZСимвол X, за которым следует Z Регулярные выражения

99 © Luxoft Training 2013 Квантификация (поиск последовательностей) Представление Число повторений Экви- валент Пример Соответствие ?Ноль или одно{0,1}colou?rcolor, colour *Ноль или более {0,}colou*rcolor, colour, colouur и т. д. +Одно или более {1,}colou+rcolour, colouur и т. д. (но не color) Представление Число повторений Пример Соответствие {n}{n}Ровно n разcolou{3}rcolouuur {m,n}{m,n}От m до n включит ельно colou{2,4}rcolouur, colouuur, c olouuuur {m,}Не менее mcolou{2,}rcolouur, colouuur, c olouuuur и т. д. {,n}Не более ncolou{,3}rcolor, colour, colouu r, colouuur Регулярные выражения

100 © Luxoft Training 2013 MethodDescription s.matches("regex")Возвращает true, если вся строка соответствует регулярному выражению s.split("regex")Создает массив из подстрок, полученных разбиением строки на части в точках вхождения regex. Сам regex не входит в результат. s.replace("regex", "replacement")Заменяет regex наreplacement (заменяет только первое вхождение) s.replaceAll("regex", "replacement") Заменяет regex наreplacement (все вхождения) Регулярные выражения Методы класса String:

101 © Luxoft Training 2013 Пример: телефонный номер Выражение: ^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$ Валидно для телефонов: (926) (495) (495) Регулярные выражения

102 © Luxoft Training 2013 Регулярные выражения Для компиляции регулярного выражения необходимо: Pattern myPattern = Pattern.compile("regex") Пример: Введение Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches();

103 © Luxoft Training 2013 Регулярные выражения Созданный класс Pattern инкапсулирует разобранное регулярное выражение Класс Matcher можно получить как Matcher myMatcher = Pattern.matcher("subject") Класс Matcher будет выполнять работу со строкой subject Использование Pattern

104 © Luxoft Training 2013 Регулярные выражения Использование Pattern

105 © Luxoft Training 2013 Регулярные выражения Метод matches(String regex) класса String возвращает true, если строка соответствует данному регулярному выражению Метод replaceAll(String regex, String replacement) позволяет заменить все части строки, удовлетворяющие регулярному выражению regex на строку replacement Класс String

106 © Luxoft Training 2013 Примеры: StringMatcherTest StringMatchesTutor RegExpTutor Регулярные выражения Класс String

107 © Luxoft Training 2013 Регулярные выражения Класс Scanner позволяет разбивать строку на части, разделенные строкой, удовлетворяющей некоторому регулярному выражению: Класс Scanner

108 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property- файлами Ключевые классы системной библиотеки

109 © Luxoft Training 2013 Properties Класс Properties представляет набор свойств, которые могут быть прочитаны из потока или записаны в поток. Расширяет класс Hashtable Конструкторы: Properties() Properties(Properties defaults) Использование класса Properties

110 © Luxoft Training 2013 Properties Метод getProperty(String key) получает значение для заданного ключа Метод setProperty(String key, String value) позволяет установить ключ и значение Использование класса Properties

111 © Luxoft Training 2013 Properties Внешний файл может содержать список имя- значение в следующем виде: color=red country=Australia Класс Properties позволяет осуществлять чтение и запись подобных фалов Использование класса Properties

112 © Luxoft Training 2013 Properties Метод load(InputStream is) осуществляет чтение свойств из потока данных Метод store(OutputStream out, String header) осуществляет запись содержимого класса Properties в поток в формате имя=значение Использование класса Properties

113 © Luxoft Training 2013 Properties Использование класса Properties. Пример

114 © Luxoft Training 2013 Properties Системные свойства позволяют узнать информацию о ОС, пользователе, версии Java и т.п. Получить свойство можно: String System.getProperty(key) – возвращает свойство по имени String System.getProperty(String key, String default) – возвращает свойство по имени. Если свойство не найдено, возвращается значение default Системные свойства

115 © Luxoft Training 2013 Properties Properties System.getProperties() – возвращает объект Properties детализирующий все полученные системные свойства Системные свойства

116 © Luxoft Training 2013 Пример: PropertiesTutor Properties

117 © Luxoft Training 2013 Упражнение Упражнение 12 Bank Application Использование ключевых классов

118 © Luxoft Training 2013 Модуль 1 Введение Классы System, Math, Object Строки Классы StringBuffer и StringBuilder Обертки примитивов Auto-boxing и auto-unboxing Работа с регулярными выражениями Класс Properties и работа с property-файлами Ключевые классы системной библиотеки