532.07K
Категория: ПрограммированиеПрограммирование

Строки. Регулярные выражения

1.

Курс «Программирование на Java» - Строки.
Регулярные выражения

2.

Курс «Программирование на Java» - Строки. Регулярные выражения
Рассматриваемые вопросы
• Класс String
• Работа со строками
• Пул строк
• Классы StringBuilder и StringBuffer
• StringBuilder vs StringBuffer
• Регулярные выражения (regex)
• Классы Pattern и Matcher

3.

Курс «Программирование на Java» - Строки. Регулярные выражения
Класс String
Для работы со строками в Java используется тип данных java.lang.String
Стоит отметить, что класс String неизменяемый (immutable). После того как объект типа String создан, его
содержимое не может изменяться
String greeting = "Hello Students";
String title = "Тема - Строки";
String text = "В первой половине XII века книга аль-Хорезми" +
" в латинском переводе проникла в Европу." +
" Сегодня считается, что слово «алгоритм» попало" +
" в европейские языки именно благодаря этому переводу.";

4.

Курс «Программирование на Java» - Строки. Регулярные выражения
Работа со строками
Преобразование строки в массив символов
char[] charArray = text.toCharArray();
Для объектов и литералов типа String в Java определена одна операция:
она служит для объединения (конкатенации) двух строк
String greeting = "Hello" + " IT-Academy" + " Students";
Так же можно использовать метод
String greeting = "Hello".concat(" IT-Academy").concat(" Students");
+

5.

Курс «Программирование на Java» - Строки. Регулярные выражения
Работа со строками
Основные операции со сторонками раскрываются через методы класса String, среди которых можно выделить
следующие:
• length() - возвращает длину строки
• charAt() - возвращает символ (char) по индексу
• equals() - сравнивает строки с учетом регистра
• equalsIgnoreCase() - сравнивает строки без учета регистра
• toLowerCase() - переводит все символы строки в нижний регистр
• toUpperCase() - переводит все символы строки в верхний регистр
• indexOf() - находит индекс последнего вхождения подстроки в строку
• startsWith() - определяет, начинается ли строка с заданной подстроки
• endsWith() - определяет, заканчивается ли строка на заданную подстроку
• replace() - заменяет в строке одну подстроку на другую
• substring() - возвращает подстроку, начиная с опресненного индекса до конца или до определенного индекса
• join() - соединяет строки с учетом разделителя
• split() - разделяет строку на массив подстрок с учетом разделителя
Полный список методов можно найти в самом классе и изучить почитав документацию

6.

Курс «Программирование на Java» - Строки. Регулярные выражения
Работа со строками
Преобразование строки в массив символов
String str = "Я стану отличным программистом";
int len = str.length();
System.out.println("Длина строки: " + len + " символов.");
String[] s = str.split(" ");
System.out.println("В тексте: " + s.length + " слов.");
String newStr = str + ", если буду хорошо учиться";
System.out.println("Длина строки: " + newStr.length() + " символов.");
String result = newStr.replace("программистом", “Java-программистом");
System.out.println(result);
//———————— Вывод ————————
Длина строки: 30 символов.
В тексте: 4 слов.
Длина строки: 56 символов.
Я стану отличным Java-программистом, если буду хорошо учиться

7.

Курс «Программирование на Java» - Строки. Регулярные выражения
Пул строк
Пул строк - это набор строк, который хранится в памяти Java

8.

Курс «Программирование на Java» - Строки. Регулярные выражения
Пул строк
При создании объекта через оператор new строка не помещается в пул строк
Для того чтобы поместить строку в пул используется метод intern()
public static void main(String[] args) {
String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
String s4 = s3.intern();
System.out.println("s1 == s2 :" + (s1 == s2)); // true
System.out.println("s1 == s3 :" + (s1 == s3)); // false
System.out.println("s1 == s3 :" + (s1 == s4)); // true
}
Пул строк возможен благодаря неизменяемости строк в Java и реализации интернирования строк.
Пул строк помогает экономить большой объем памяти, но с другой стороны создание строки
занимает больше времени

9.

Курс «Программирование на Java» - Циклы
Задания
• Найдите количество вхождения слова 'test' в строке.
• Введите строку (текст). Вывести первый, последний и средний (если он есть)) символы.
• Введите строку (текст). Показать номера символов, совпадающих с последним символом строки.
• Введите строку (текст). Найдите наибольшее количество идущих подряд цифр.
• Введите строку (текст). После этого определить, является ли она палиндромом (перевертышем), т.е. одинаково
пишется как с начала, так и с конца.
• Введите строку (текст). Поменяйте местами первое самое длинное слово с последним самым коротким.

10.

Курс «Программирование на Java» - Строки. Регулярные выражения
StringBuilder и StringBuffer
Класс String immutable - неизменяемый
String str = "I study programming";
str = str + " and English";
Это приводит к тому, что создается новый объект, и содержимое исходных строк копируется в него.
Для решения это проблемы следует использовать объекта классов StringBuilder и StringBuffer. Оба этих класса
позволяют менять содержимое находящихся в них строк.
String str = "I study programming";
StringBuilder strBuilder = new StringBuilder(str);
strBuilder.append(" and English");
strBuilder.append(". I write code every day!");

11.

Курс «Программирование на Java» - Строки. Регулярные выражения
StringBuilder vs StringBuffer
Класс StringBuilder - НЕ потокобезопасный
Класс StringBuffer - потокобезопасный
Поскольку тратятся дополнительные накладные расходы на синхронизацию потоков в StringBuffer,
поэтому StringBuffer медленнее, чем StringBuilder
Во всем остальном эти классы идентичны. К примеру оба этих класса содержат одинаковые методы. Самые
популярные из них:
• append() - объединяет текущую строку с переданной через метод
• length() - возвращает текущую длину строки
• insert() - вставляет заданную строку в текущую по индексу позиции
• reverse() - изменяет порядок символов на обратный
• delete() - удаляет последовательность символов
• deleteCharAt() - удаляет один символ из указанной позиции (индекса)

12.

Курс «Программирование на Java» - Строки. Регулярные выражения
Регулярные выражения
Регулярные выражения используются в случае, если необходимо выполнить проверку текста в строке на
соответствие определенному шаблону. Однако не любая строка может быть скомпилирована в регулярное
выражение, а только та, которая соответствует определенному синтаксису
метасимвол
назначение
.
любой символ кроме новой строки
\w \d \s
буква, цифра, пробел
\W \D \S
не буква, не цифра, не пробел
[abc]
любой символ из a, b или c
[^abc]
не a, b или c
[a-g]
любой символ от a до g
\.
\*
\\
экранированные символы
\t
\n
\r
табуляция, новая строк, перевод каретки
a* a+ a?
0 или более, 1 или более, 0 или 1 символ
a{5} a{2,} a{1,3}
ровно 5, 2 или более, от 1 до 3 символов

13.

Курс «Программирование на Java» - Строки. Регулярные выражения
Работа с регулярными выражениями
Более мощные средства для работы с регулярными выражениями предлагают классы Pattern и Matcher. Класс
Pattern служит для хранения регулярного выражения, а Matcher служит для выполнения операций поиска и
сравнения
String str = "Test - string - test";
Pattern pattern = Pattern.compile(" +- +");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.start() + " " + matcher.end());
System.out.println(matcher.group());
}
//———————— Вывод ————————
4 7
' - '
13 18
' '

14.

Курс «Программирование на Java» - Строки. Регулярные выражения
Работа с регулярными выражениями
Часть регулярного выражения можно выделить в группу. Для этого его следует взять в круглые скобки. При
нахождении соответствия, указав методу group() и номер, начиная с единицы, можно получить не все
соответствие, а только одну из его групп
String str = "
www.it-academy.by
";
Pattern pattern = Pattern.compile("www\\.([\\w-]+)\\.by");
Matcher matcher = pattern.matcher(str);
matcher.find();
System.out.println(matcher.group(1));
//———————— Вывод ————————
it-academy

15.

Курс «Программирование на Java» - Строки. Регулярные выражения
Регулярные выражения
Необходимо в тексте найти числа, в том числе отрицательные, то есть последовательности цифр, которые могут
начинаться со знака минус.
Вариантом поиска может быть:
• -?[0123456789]+
• -?[0-9]+
• -?\\d+
English     Русский Правила