Uploaded by Татьяна Ларичева

Строки в Java

advertisement
Объектно-ориентированное
программирование
Ларичева Т.В.
Работа со строками в Java
Ларичева Т.В.
Строки представляют из себя последовательность символов.
В языке программирования
Java строки — это объект.
Обработка строк в Java:
•String, StringBuffer, StringBuilder
(реализация строк)
•Pattern, Matcher (регулярные
выражения)
String является реализацией java.lang.CharSequence
3
Ларичева Т.В.
Обработка строк в Java:
String, StringBuffer, StringBuilder
(реализация строк)
Ларичева Т.В.
Класс String в Java
ключевые характеристики:
5
Ларичева Т.В.
Создание строк
1. Используя строковые литералы:
2. С помощью конструкторов которые позволяют:
•создать объект, содержащий пустую
строку
•создать копию строковой
переменной
•создать строку на основе массива
символов
•создать строку на основе массива
байтов (с учетом кодировок)
•и т.д.
6
Ларичева Т.В.
Длина
Ларичева Т.В.
Конкатенация — операция объединения строк, возвращает новую строку, что есть
результатом объединения второй строки с окончанием первой.
1. Метод concat
2. Перегруженные операторы "+" и "+="
Ларичева Т.В.
Форматирование
Класс String предоставляет возможность создания форматированных строк. За это отвечает
статический метод format, например:
String formatString = "We are printing double variable (%f), string ('%s') and integer variable (%d).";
System.out.println(String.format(formatString, 2.3, "habr", 10));
// Мы печатаем переменную c плавающей точкой (2.300000), строку ('habr') и целочисленную
переменную (10)
9
Ларичева Т.В.
Сравнение строк
10
Ларичева Т.В.
Получение символов и подстрок
11
Ларичева Т.В.
Преобразование
1. Число в строку
2. Строку в число
12
Ларичева Т.В.
Перевод коллекции строк к строковому
представлению
13
Ларичева Т.В.
Разбиение строки на массив строк
14
Ларичева Т.В.
Определение позиции элемента в строке
15
Ларичева Т.В.
Извлечение подстроки из строки
16
Ларичева Т.В.
Перевод строки в верхний/нижний регистр:
17
Ларичева Т.В.
Преобразование
1. Число в строку
2. Строку в число
18
Ларичева Т.В.
Список всех методов класса String можно изучить в официальной документации.
На работу со строками сущесвует множество задач. Например, на Coding Bat.
Так же есть курс на coursera: "Algorithms on Strings".
Рекомендую к просмотру доклад с JPoint 2015 года: Алексей Шипилёв —
Катехизис java.lang.String
https://www.youtube.com/watch?v=SZFe3m1DV1A&t=10s
19
Ларичева Т.В.
StringBuffer
Строки являются неизменными, поэтому частая их модификация приводит к созданию
новых объектов, что в свою очередь расходует драгоценную память.
Для решения этой проблемы был создан класс java.lang.StringBuffer, который позволяет
более эффективно работать над модификацией строки.
Класс является mutable
StringBuffer может быть использован в многопоточных средах.
Создание
20
Ларичева Т.В.
StringBuffer
Модификация
используем StringBuffer для многократного выполнения операций добавления (append),
вставки (insert) и удаления (delete) подстрок.
Все остальные методы для работы с StringBuffer можно
посмотреть в документации.
21
Ларичева Т.В.
StringBuilder
StringBuilder — класс, что представляет изменяемую последовательность
символов.
Его использование в многопоточных средах нежелательно.
22
Ларичева Т.В.
Обработка строк в Java: Pattern, Matcher
(регулярные выражения)
https://javarush.ru/groups/posts/136-reguljarnihe-vihrazhenija-v-java-chastjh-1
Ларичева Т.В.
Регулярные выражения (regular expressions)
— мощное и эффективное средство для обработки текста.
Они впервые были использованы в текстовых
редакторах операционной системы UNIX
(ed и QED) и сделали прорыв в электронной
обработке текстов конца XX века.
В 1987 году более сложные РВ возникли в первой
версии языка Perl и были основаны на пакете
Henry Spencer (1986), написанном на языке С.
А в 1997 году, Philip Hazel разработал Perl
Compatible Regular Expressions (PCRE) —
библиотеку, которая точно наследует
функциональность РВ в Perl.
Сейчас PCRE используется многими
современными инструментами
24
Ларичева Т.В.
Регулярные выражения (regular expressions)
Механизм
•Существует две базовые технологии, на
основе которых строятся механизмы РВ:
•Недетерминированный конечный автомат (НКА) —
«механизм, управляемый регулярным выражением»
Детерминированный конечный автомат (ДКА) —
«механизм, управляемый текстом»
НКА — механизм, в котором управление внутри
РВ передается от компонента к компоненту. НКА
просматривает РВ по одному компоненту и
проверяет, совпадает ли компонент с текстом.
Если совпадает — проверятся следующий
компонент. Процедура повторяется до тех пор,
пока не будет найдено совпадение для всех
компонентов РВ (пока не получим общее
совпадение).
ДКА — механизм, который анализирует строку и
следит за всеми «возможными совпадениями».
Его работа зависит от каждого просканированного
символа текста (то есть ДКА «управляется
текстом»). Даний механизм сканирует символ
текста, обновляет «потенциальное совпадение» и
резервирует его. Если следующий символ
аннулирует «потенциальное совпадение», то ДКА
возвращается к резерву. Нет резерва — нет
совпадений.
Регулярные выражения в Java используют механизм НКА.
25
Ларичева Т.В.
Регулярные выражения (regular expressions)
Подход к обработке
В языках программирования существует три подхода к
обработке РВ:
•интегрированный
•процедурный
•объектно-ориентированный
Для обработки регулярных выражений в Java используют
объектно-ориентированный подход.
Реализация
26
Ларичева Т.В.
Регулярное выражение (RegEx) – это шаблон для поиска строки в
тексте.
В Java исходным представлением этого шаблона всегда является строка,
то есть объект класса String.
Однако не любая строка может быть скомпилирована в регулярное
выражение, а только та, которая соответствует правилам написания
регулярного выражения – синтаксису, определенному в спецификации
языка.
Для написания регулярного выражения используются буквенные и
цифровые символы, а также метасимволы – символы, имеющие
специальное значение в синтаксисе регулярных выражений.
Например:
27
Ларичева Т.В.
Создание регулярных выражений в Java
Чтобы создать RegEx в Java, нужно сделать два простых шага:
1.написать его в виде строки с учётом синтаксиса регулярных
выражений;
2.скомпилировать эту строку в регулярное выражение;
Работа с регулярными выражениями в любой Java-программе
начинается с создания объекта класса Pattern. Для этого необходимо
вызвать один из двух имеющихся в классе статических методов compile.
Первый метод принимает один аргумент – строковый литерал
регулярного выражения, а второй – плюс еще параметр, включающий
режим сравнения шаблона с текстом:
28
Ларичева Т.В.
Синтаксис регулярных выражений
Синтаксис регулярных выражений основан на использовании символов <([{\^-=$!|]})?*+.>, которые
можно комбинировать с буквенными символами. В зависимости от роли их можно разделить на
несколько групп:
29
Ларичева Т.В.
Жадный режим квантификатора
30
Ларичева Т.В.
Алгоритм поиска по заданному шаблону "А.+а", выполняется в следующей последовательности:
31
Ларичева Т.В.
Сверхжадный режим квантификатора
32
Ларичева Т.В.
Ленивый режим квантификатора
33
Ларичева Т.В.
Экранирование символов в регулярных выражениях
Символ обратной косой черты «\» в строковых литералах в исходном коде Java интерпретируется
как символ управляющей последовательности, который предупреждает компилятор, что следующий
за ним символ — специальный и что его нужно особым образом интерпретировать.
Например:
34
Ларичева Т.В.
Методы класса Pattern
35
Ларичева Т.В.
Matcher
36
Ларичева Т.В.
Методы класса Matcher
37
Ларичева Т.В.
Ларичева Татьяна Викторовна
кандид. пед. наук, доцент
tatatv@yandex.ru
ИНСТИТУТ
ТЕХНОЛОГИЙ
БИЗНЕСА
Кафедра прикладной
информатики и
статистики
38
38
Download