Substring()
Метод substring() — один из ключевых инструментов работы со строками в Java. Он используется для получения подстрок из существующей строки, что позволяет извлекать и обрабатывать части текста в зависимости от задач приложения. substring() — простой, но очень мощный метод, который часто используется в повседневной разработке.
Описание и особенности метода substring()
Метод substring() в Java позволяет создать новую строку на основе части исходной строки. Он имеет два варианта вызова:
substring(int beginIndex) — возвращает подстроку, начиная с символа по индексу beginIndex и до конца строки.
substring(int beginIndex, int endIndex) — возвращает подстроку от символа по индексу beginIndex до символа по индексу endIndex (не включая его).
Внутреннее устройство метода substring()
Под капотом метод substring() в классах String и StringBuilder имеет разное внутреннее устройство, что важно учитывать при работе с большими строками.
Реализация в классе String:
До Java 7 метод substring() создавал представление исходной строки с использованием тех же данных в памяти. Это означало, что даже если вам нужна была небольшая часть строки, метод ссылался на весь исходный массив символов. В некоторых ситуациях это приводило к "утечке памяти". Например, если большая строка сохранялась только ради небольшой подстроки, вся память исходной строки оставалась заблокированной.
После Java 7 реализация была изменена: теперь метод создает новый массив символов для подстроки, что устранило проблему с утечкой памяти, но увеличило затраты на создание подстрок.
Реализация в классе StringBuilder:
Для StringBuilder метод substring() работает аналогично, но он не создает новых строк, а возвращает копию содержимого StringBuilder в указанном диапазоне. Это делает его более производительным при многократных операциях над строками.
Основные применения метода substring()
Извлечение определенных частей строки: substring() используется для выделения частей строк, таких как имя файла, расширение, часть URL или параметры из строки.
Парсинг строк: В парсинге текстовых данных метод помогает выделить нужные фрагменты, например, обработать шаблоны или строки фиксированной длины.
Форматирование и редактирование текста: Часто применяется для удаления ненужных символов в начале и конце строки или выделения определенных частей.
#Java #Training #Medium #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()
Извлечение имени файла и расширения:
Выделение параметров из URL:
Удаление первых и последних символов:
Важные моменты при работе с substring()
Обработка исключений: Если переданные индексы выходят за пределы строки, метод вызывает исключение StringIndexOutOfBoundsException. Это часто бывает при неправильной работе с переменными индексов:
#Java #Training #Medium #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