StringBuffer та StringBuilder. Регулярні вирази

Прокрутити вниз

StringBuffer та StringBuilder. Регулярні вирази – онлайн курс java

1. StringBuffer та StringBuilder

Класи StringBuffer і StringBuilder використовуються для роботи з рядками, які часто змінюються. Це альтернатива класу `String`, але на відміну від `String`, ці класи представляють змінювані рядки.

Проблема з `String`:

Рядки у Java є незмінними (immutable), тому кожен раз, коли ви модифікуєте рядок, створюється новий об’єкт, що може негативно впливати на продуктивність, особливо при частих змінах.

Щоб вирішити цю проблему, Java надає класи StringBuffer і StringBuilder, які дозволяють змінювати рядки без створення нових об’єктів кожен раз.

Основні відмінності між `StringBuffer` і `StringBuilder`:

  • StringBuffer: синхронізований (thread-safe). Використовується в багатопотоковому середовищі, де потрібно уникати одночасних змін з різних потоків.
  • StringBuilder: не синхронізований. Підходить для однопотокового середовища, коли не потрібно синхронізації. Швидший, ніж `StringBuffer`.

Операції з `StringBuffer` та `StringBuilder`

Операції цих класів аналогічні, тому приклади будуть актуальні для обох класів.

Створення об’єктів:

StringBuffer sb1 = new StringBuffer(“Hello”);
StringBuilder sb2 = new StringBuilder(“Hello”);

Основні методи:

1. Додавання рядків (конкатенація):
Метод append() додає новий рядок в кінець існуючого.
sb1.append(” World”); // “Hello World”

2. Вставка (insertion):
Метод insert(int offset, String str) вставляє рядок на певну позицію.
sb1.insert(6, “Java “); // “Hello Java World”

3. Заміна підрядка:
Метод replace(int start, int end, String str) замінює частину рядка між позиціями `start` і `end` на новий рядок.
sb1.replace(6, 10, “C++”); // “Hello C++ World”

4. Видалення символів:
Метод delete(int start, int end) видаляє символи між індексами `start` і `end`.
sb1.delete(5, 9); // “Hello World”

5. Зворотний порядок символів:
Метод reverse() змінює порядок символів у рядку на зворотний.
sb1.reverse(); // “dlroW olleH”

6. Отримання довжини та ємності:
length() повертає кількість символів у рядку.
capacity() повертає ємність (розмір виділеної пам’яті для рядка).
int length = sb1.length(); // 11
int capacity = sb1.capacity(); // Залежить від розміру

7. Перетворення у рядок:
Метод toString() перетворює об’єкт `StringBuffer` або `StringBuilder` у рядок (`String`).
String str = sb1.toString();

Приклад роботи з `StringBuilder`:

public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(“Hello”);

// Додавання
sb.append(” World”); // “Hello World”

// Вставка
sb.insert(6, “Java “); // “Hello Java World”

// Заміна
sb.replace(6, 10, “C++”); // “Hello C++ World”

// Видалення
sb.delete(5, 9); // “Hello World”

// Зворотній порядок
sb.reverse(); // “dlroW olleH”

// Перетворення у рядок
String result = sb.toString();

System.out.println(result); // “dlroW olleH”
}
}

2. Регулярні вирази (Regular Expressions)

Регулярні вирази (regex) — це спеціальні шаблони, що дозволяють здійснювати пошук, відповідність та маніпуляції з текстовими даними на основі шаблону. У Java регулярні вирази реалізовані через клас Pattern та Matcher з пакету `java.util.regex`.

Основні класи для роботи з регулярними виразами:

1. Pattern — представляє сам регулярний вираз.
2. Matcher — використовується для пошуку та перевірки відповідності рядків регулярному виразу.

Основні операції з регулярними виразами:

1. Перевірка відповідності рядка регулярному виразу:
Метод matches() класу `String` дозволяє швидко перевірити, чи відповідає рядок регулярному виразу.
String str = “abc123”;
boolean matches = str.matches(“[a-z]+\\d+”); // true

2. Шаблон та пошук:
За допомогою класів `Pattern` та `Matcher` можна створювати складніші операції пошуку.
String text = “I love Java and programming.”;
Pattern pattern = Pattern.compile(“\\bJava\\b”); // Шукаємо слово “Java”
Matcher matcher = pattern.matcher(text);
boolean found = matcher.find(); // true

3. Заміна тексту за шаблоном:
Метод replaceAll() дозволяє замінювати частини тексту, які відповідають регулярному виразу.
String text = “I love Java and JavaScript.”;
String replaced = text.replaceAll(“\\bJava\\b”, “C++”); // “I love C++ and JavaScript.”

4. Розбиття рядка за шаблоном:
Метод split() класу `String` розбиває рядок на частини за регулярним виразом.
String text = “apple, banana, orange”;
String[] fruits = text.split(“, “); // Масив [“apple”, “banana”, “orange”]

Приклад використання регулярних виразів:

import java.util.regex.*;

public class RegexExample {
public static void main(String[] args) {
String text = “I love Java and JavaScript.”;

// Шаблон для пошуку слова “Java”
Pattern pattern = Pattern.compile(“\\bJava\\b”);
Matcher matcher = pattern.matcher(text);

// Перевірка наявності слова “Java”
while (matcher.find()) {
System.out.println(“Знайдено: ” + matcher.group() + ” на позиції ” + matcher.start());
}

// Заміна “Java” на “C++”
String newText = text.replaceAll(“\\bJava\\b”, “C++”);
System.out.println(“Після заміни: ” + newText);
}
}

Основні символи регулярних виразів:

1. `[]` — діапазон символів.
– `[a-z]` — будь-яка літера від `a` до `z`.
– `[0-9]` — будь-яка цифра.

2. `^` — початок рядка.
– `^abc` — рядок має починатися з `abc`.

3. `$` — кінець рядка.
– `abc$` — рядок має закінчуватися на `abc`.

4. `.` — будь-який символ.
– `a.b` — “a” + будь-який символ + “b” (наприклад, “a1b” або “acb”).

5. `*` — 0 або більше входжень.
– `a*` — нуль або більше літер “a”.

6. `+` — 1 або більше входжень.
– `a+` — одна або більше літер “a”.

7. `?` — 0 або 1 входження.
– `a?` — одна літера “a” або її відсутність.

Висновок:

  • StringBuffer і StringBuilder дозволяють ефективно працювати зі змінними рядками, але StringBuilder кращий для однопотокових програм через вищу продуктивність.
  • Регулярні вирази є потужним інструментом для пошуку та маніпулювання текстом за шаблонами, особливо корисними для обробки строкових даних, таких як перевірка форматів, пошук підрядків або заміна.

StringBuffer та StringBuilder Регулярні вирази

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert