Удаление расширения файла из строки в Java: эффективные методы

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы удалить расширение файла, можно использовать методы substring и lastIndexOf класса String. Метод lastIndexOf определяет позицию точки перед расширением файла.

Java
Скопировать код
String fileName = "photo.jpeg";
String baseName = fileName.substring(0, fileName.lastIndexOf('.'));

В этом случае переменная baseName будет содержать "photo", а расширение .jpeg будет удалено.

Как обработать особенные ситуации?

Правильная обработка исключений играет ключевую роль для корректного функционирования кода.

Скрытые файлы и файлы без расширений

На примере скрытого файла .htaccess и файла README без расширения, показано, как можно обработать файлы, в имени которых нет расширения или оно начинается с точки.

Java
Скопировать код
String hiddenFile = ".htaccess";
String base = (hiddenFile.indexOf('.') == 0) ? hiddenFile : hiddenFile.substring(0, hiddenFile.lastIndexOf('.'));
  
String noExtension = "README";
base = (noExtension.contains(".")) ? noExtension.substring(0, noExtension.lastIndexOf('.')) : noExtension;

Файлы, имя которых содержит несколько точек

Для имен файлов с несколькими точками важно правильно определить позицию последней точки, которая предшествует расширению.

Java
Скопировать код
String complexName = "archive.tar.gz";
String simplified = complexName.substring(0, complexName.lastIndexOf('.'));

Универсальная обработка путей к файлам

Чтобы ваш код корректно работал с файлами на разных платформах, используйте системное свойство file.separator.

Java
Скопировать код
String pathSeparator = System.getProperty("file.separator");

Использование внешних библиотек

В библиотеке Apache Commons IO есть утилита FilenameUtils.removeExtension(), которая упрощает удаление расширения файла.

Java
Скопировать код
String completeFileName = FilenameUtils.removeExtension(fileName);

Визуализация

Представим, что у вас есть книжная полка (📚) с книгами, названия которых имеют формат "Adventure_Part1.txt":

Markdown
Скопировать код
📚: [ "Mystery_Novel_V2.txt", "Biography_2019.pdf", "Cookbook_Edition3.txt" ]

Метод .replace() может "сдуть" расширения, оставив только названия книг:

Java
Скопировать код
String title = fileName.replaceFirst("[.][^.]+$", "");

Теперь на полке так:

Markdown
Скопировать код
📚: [ "Mystery_Novel_V2", "Biography_2019", "Cookbook_Edition3" ]

Каждая книга представлена в её первозданной форме, без указания формата. ✨

Продвинутые подходы

Гибкий код: Прелести использования цепочек методов

Использование цепочки методов делает код короче и выразительнее.

Java
Скопировать код
String edited = fileName.replaceAll("(?<=.).+$", "").concat("_edited");

Проверяем, перед тем как обрезать

Проверка с помощью endsWith может предотвратить нежелательное удаление.

Java
Скопировать код
if (fileName.endsWith(".jpeg")) {
  // Расширение есть, можно спокойно его удалять.
}

Оценка производительности и масштабируемость решения

Модульное тестирование: Ваше спасательное кольцо

Пишите тесты для проверки надёжности вашего кода.

Java
Скопировать код
assert "recipe".equals(removeExtension("recipe.txt"));
assert "multi.part".equals(removeExtension("multi.part.tar.gz"));

Большой объем данных: Задачи производительности

Если у вас большой объем данных, выбирайте наиболее эффективные методы.

Полезные материалы

  1. How to get the filename without the extension in Java? – Stack Overflow — различные подходы к удалению расширений файлов в Java.
  2. FilenameUtils (Apache Commons IO 2.7 API) — работа с именами файлов с помощью библиотеки Apache Commons IO.
  3. String (Java SE 11 & JDK 11 ) — документация по классу String в Java.
  4. Split() String method in Java with examples – GeeksforGeeks — руководство по использованию метода split строки в Java.
  5. Java – String.substring() Method — руководство по использованию метода substring в Java.