Java Regex FileName не повторяется

Я пытаюсь установить проверку для неповторяющихся имен файлов, если какой-то файл повторяется, это должно быть написано так:

  • ИМЯ ФАЙЛА.PDF
  • ФАЙЛ_1.PDF
  • ФАЙЛ_2.PDF

Так что первый я могу сделать, а все остальные как взять?.

Я получу список всех документов с именами файлов раньше, поэтому теперь я пытаюсь сделать так для каждого документа, но я не знаю, как сделать регулярное выражение для его получения.

FILENAME_1.PDF -> REGEX() -> ПОЛУЧИТЬ ВОЗВРАТ -> 1


ОБНОВИТЬ

Если у меня есть эти файлы в моем bbdd: [filename.pdf, filename_1.pdf, filename_2.pdf].

Мне нужно, когда кто-то загружает новые файлы на основе этих файлов, мое новое имя будет filename_3.pdf, если существует имя файла 2.

ИМЯ ФАЙЛА_ВЕРСИЯ.РАСШИРЕНИЕ

Исходя из этого, мне нужно получить версию последнего имени файла. Спасибо!

Примечание. Будут разные имена файлов, например FILANEM_FILENAM_VERSION.pdf.


Спасибо вам!

Почему вы хотите сделать это с помощью регулярного выражения? Просто используйте хэш-карту с вхождениями файлов - <name, count>. Не усложняйте простую задачу.

Amongalen 06.03.2019 16:22

Не могли бы вы добавить ожидаемый результат для вашего примера? «Значит, я могу сделать первый, а все остальные как взять?» Эта фраза неясна. Вы хотите получить всю копию первой или только первую и игнорировать копию?

vincrichaud 06.03.2019 16:22

Я не могу использовать hashmap, только имя файла. @Амонгален

Alberto Acuña 06.03.2019 16:27

Я хочу получить последнюю версию копий, для создания новой, с увеличенной версией. Я обновлю свой ответ. @винкришо

Alberto Acuña 06.03.2019 16:28

Почему вы can't используете hashmap? Это какое-то домашнее задание или что-то в этом роде? Может быть, взгляните на это регулярное выражение, которое находит уникальные результаты: stackoverflow.com/questions/13613813/…

Amongalen 06.03.2019 16:30
_(\d+)\.[^.]+$ извлечет число (оно фиксирует число, которое предшествует последней точке в имени файла и следует за символом подчеркивания, вы можете попробовать здесь). Я действительно не уверен, как это поможет решить вашу проблему.
Aaron 06.03.2019 16:32

Откуда вы знаете, что имя файла не содержит цифр? Файл нельзя назвать filename_1.pdf? Его копия будет filename_1_1.pdf

Amongalen 06.03.2019 16:34

вот почему мне нужно регулярное выражение, каждый файл с NAME_version.PDF будет таким же с увеличенной версией, поэтому это должно быть filename_2.pdf, а не filename_1_1.pdf @Amongalen

Alberto Acuña 06.03.2019 16:35

не получаю версию имени файла, простите @Aaron, это регулярное выражение Java?

Alberto Acuña 06.03.2019 16:42

@AlbertoAcuña Я добавил ответ со ссылкой на ideone с кодом Java.

Aaron 06.03.2019 16:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
10
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы использовал следующее регулярное выражение:

_(\d+)\.[^.]+$

Или в Java:

_(\\d+)\\.[^.]+$

Регулярное выражение захватывает число между подчеркиванием и последней точкой в ​​имени файла.

Число, которое вы ищете, захвачено в первой группе захвата и должно быть извлечено с помощью Matcher.group.

Вы можете попробовать это здесь :

No version found in filename.pdf
No version found in filename1.pdf
filename_1.pdf - version found : 1
filename1_2.pdf - version found : 2
No version found in filename_1.test.pdf
filename_1.test_2.pdf - version found : 2
No version found in filename_1

Другие вопросы по теме