Извлечение подстроки перед одним из двух символов с помощью регулярного выражения - PullRequest
0 голосов
/ 13 июля 2020

Итак, у меня есть исходный набор файлов:

file1.txt 
file2.txt 

Когда я вношу изменения в эти файлы и сохраняю их, я добавляю к ним отметку времени, чтобы они стали:

fileN_DD-Mon-YYYY_HHMMSS.txt

Но если бы я сделал какие-либо дополнительные сохранения, отметки времени начали бы складываться:

fileN_DD-Mon-YYYY_HHMMSS_DD-Mon-YYYY_HHMMSS.txt

Мне нужен способ получить подстроку, которая встречается до первого появления любого "." или "_", чтобы получить строку, которая находится перед ними (т.е. фактическое имя файла ("fileN")).

Я дошел до этого с помощью

int lastDot = fileName.getName().lastIndexOf('.'); 
String renamed = fileName.getName().substring(0,lastDot) + getDateTime() + fileName.getName().substring(lastDot);

I ' Я пробовал использовать Scanner :: useDelimiter, чтобы получить первое появление символа "." или "_" с использованием регулярных выражений, но безуспешно.

String renamed = savedFileName(fileName)

public static String savedFileName(String fileName) {
        final String TXT = ".txt";
        Scanner s = new Scanner(fileName);
        s.useDelimiter(<regex>);
        String trueFileName = s.next();
        s.close();

        return trueFileName + getDateTime() + TXT;

для регулярного выражения, я пробовал "\\W", но это возвращает только последнюю временную метку:

_DD-Mon-YYYY_HHMMSS.txt

и ".|_", но это возвращает это чудовище:

fileN.txt_DD-Mon-YYYY.txt_(more timestamps).txt.

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете использовать метод String split с шаблоном регулярного выражения \.|_:

String longFile = "fileN_DD-Mon-YYYY_HHMMSS.txt";
String shortFile = "file1.txt ";
String pattern = "\\.|_"; // need to escape backslash
System.out.println(longFile.split(pattern)[0]);
System.out.println(shortFile.split(pattern)[0]);

Или, что то же самое, регулярное выражение [._].

Вывод:

fileN
file1
...