Как проверить, что имя файла содержит любую дату в его имени в Java?

Мне нужно проверить, что имя файла содержит любую дату или число в его имени, и если оно содержит, чтобы изменить имя соответственно.

Пример 1

phd_20001_pat_apr.txt.gz

В приведенном выше примере имя файла содержит 20001. Поэтому я хочу изменить его соответственно:

phd_*_pat_apr*

пример2

phd_pat_mnc.txt.gz

В приведенном выше примере в имени файла нет ни даты, ни числа. Так что это не будет изменением.

Не могли бы вы рассказать мне, какие изменения я делаю в приведенном ниже коде, чтобы получить желаемый результат?

filename и source_file_nm являются заголовком.

if ( (((java.util.List<String>)globalMap.get("filename")).get(i)).contains("enc_prov") )
                                      {
    globalMap.put("source_file_nm",(((java.util.List<String>)globalMap.get("filename")).get(i)).substring(0,(((java.util.List<String>)globalMap.get("filename")).get(i)).lastIndexOf("_")+2));
}             

Можете ли вы опубликовать свой полный код? вместо блока if

Arun Gowda 11.12.2020 13:51

Это дубликат вашего предыдущего вопроса. Попробуйте улучшить этот вопрос вместо того, чтобы публиковать новый.

Joakim Danielson 11.12.2020 14:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
2
370
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать приведенный ниже подход для достижения своей цели.

  1. Используя регулярное выражение, проверьте, содержит ли имя файла какое-либо число
  2. Если да, то разбить строку на символы и заменить ее на *
Ответ принят как подходящий

Вы можете использовать регулярное выражение для этого

String filenamePattern = "phd_[0-9]+_.*"
 try (Stream<Path> stream = Files.find(folder,
                                              Integer.MAX_VALUE,
                                              (path,
                                               basicFileAttributes) -> path.toFile().getName().matches(filenamePattern))) {
            return stream.collect(Collectors.toList());
        }

Это вернет список всех файлов, соответствующих filenamePattern. Соответственно измените [maxDepth максимальное количество уровней каталогов для поиска] в файле files.find.

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