Java for Beginner
676 subscribers
544 photos
155 videos
12 files
833 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Substring()

Метод substring() — один из ключевых инструментов работы со строками в Java. Он используется для получения подстрок из существующей строки, что позволяет извлекать и обрабатывать части текста в зависимости от задач приложения. substring() — простой, но очень мощный метод, который часто используется в повседневной разработке.

Описание и особенности метода substring()

Метод substring() в Java позволяет создать новую строку на основе части исходной строки. Он имеет два варианта вызова:
substring(int beginIndex) — возвращает подстроку, начиная с символа по индексу beginIndex и до конца строки.
substring(int beginIndex, int endIndex) — возвращает подстроку от символа по индексу beginIndex до символа по индексу endIndex (не включая его).
String text = "Hello, World!";
String result1 = text.substring(7); // Вернет: "World!"
String result2 = text.substring(0, 5); // Вернет: "Hello"
В первом примере мы создаем подстроку, начиная с индекса 7, и получаем строку "World!". Во втором примере подстрока берется от символа 0 до символа 5 (не включая 5), что возвращает "Hello".


Внутреннее устройство метода substring()

Под капотом метод substring() в классах String и StringBuilder имеет разное внутреннее устройство, что важно учитывать при работе с большими строками.

Реализация в классе String:
До Java 7 метод substring() создавал представление исходной строки с использованием тех же данных в памяти. Это означало, что даже если вам нужна была небольшая часть строки, метод ссылался на весь исходный массив символов. В некоторых ситуациях это приводило к "утечке памяти". Например, если большая строка сохранялась только ради небольшой подстроки, вся память исходной строки оставалась заблокированной.

После Java 7 реализация была изменена: теперь метод создает новый массив символов для подстроки, что устранило проблему с утечкой памяти, но увеличило затраты на создание подстрок.

Реализация в классе StringBuilder:
Для StringBuilder метод substring() работает аналогично, но он не создает новых строк, а возвращает копию содержимого StringBuilder в указанном диапазоне. Это делает его более производительным при многократных операциях над строками.

public class SubstringMemoryExample {
public static void main(String[] args) {
String largeString = "This is a very large string used for testing purposes...";

// Извлекаем короткую подстроку
String shortSubstring = largeString.substring(10, 20);

// Убедимся, что новая строка действительно мала
System.out.println("Подстрока: " + shortSubstring);
}
}
Здесь, начиная с Java 7, shortSubstring не будет занимать памяти, равной largeString, поскольку для подстроки создается новая копия символов.


Основные применения метода substring()

Извлечение определенных частей строки: substring() используется для выделения частей строк, таких как имя файла, расширение, часть URL или параметры из строки.
Парсинг строк: В парсинге текстовых данных метод помогает выделить нужные фрагменты, например, обработать шаблоны или строки фиксированной длины.
Форматирование и редактирование текста: Часто применяется для удаления ненужных символов в начале и конце строки или выделения определенных частей.


#Java #Training #Medium #substring
Примеры использования substring()

Извлечение имени файла и расширения:
public class FilenameExample {
public static void main(String[] args) {
String filePath = "example/document.pdf";

// Извлекаем имя файла
int lastSlash = filePath.lastIndexOf('/');
String filename = filePath.substring(lastSlash + 1); // Результат: "document.pdf"

// Извлекаем расширение файла
int dotIndex = filename.lastIndexOf('.');
String extension = filename.substring(dotIndex + 1); // Результат: "pdf"

System.out.println("Имя файла: " + filename);
System.out.println("Расширение: " + extension);
}
}
В этом примере метод substring() помогает выделить имя файла и его расширение, что полезно при работе с файловыми путями.


Выделение параметров из URL:

public class UrlParser {
public static void main(String[] args) {
String url = "https://example.com/page?user=JohnDoe&password=1234";

// Ищем начало параметров
int paramsIndex = url.indexOf('?');
String params = url.substring(paramsIndex + 1); // Результат: "user=JohnDoe&password=1234"

System.out.println("Параметры: " + params);
}
}
Здесь substring() используется для извлечения части URL, содержащей параметры.


Удаление первых и последних символов:

public class TrimCharacters {
public static void main(String[] args) {
String original = "<Hello, World!>";

// Удаляем символы "<" и ">"
String trimmed = original.substring(1, original.length() - 1); // Результат: "Hello, World!"

System.out.println("Оригинал: " + original);
System.out.println("Изменено: " + trimmed);
}
}
Метод позволяет удалить определенные символы с начала и конца строки, например, угловые скобки.


Важные моменты при работе с substring()
Обработка исключений: Если переданные индексы выходят за пределы строки, метод вызывает исключение StringIndexOutOfBoundsException. Это часто бывает при неправильной работе с переменными индексов:
public class SubstringExceptionExample {
public static void main(String[] args) {
String text = "Java";

try {
// Некорректные индексы
String invalidSubstring = text.substring(5);
} catch (StringIndexOutOfBoundsException e) {
System.out.println("Ошибка: " + e.getMessage());
}
}
}
Индексный диапазон: В методе substring() индекс beginIndex включается в подстроку, а endIndex — нет. Это важно учитывать при указании границ выделяемого фрагмента.


#Java #Training #Medium #substring