删除字符串中的特定单词

Vip*_*629 7 java string

给定一个字符串=“ test20190906.pdf”,我怎样才能只获得“ test.pdf”,以便它通过使用string.replace或remove从字符串中删除日期?

考虑到格式将始终为文件名+日期+。扩展名。

Nic*_*s K 10

您可以使用正则表达式删除任何格式的类似于日期的连续数字,只要文件名紧随日期之后即可。

"test20190906.pdf".replaceAll("[0-9]{8}\\.", "."));
Run Code Online (Sandbox Code Playgroud)


pav*_*ere 5

我看到以前的答案,并且如果文件名中包含其他数字,则该答案将不起作用: 01_test20190913.pdf

在这种情况下,解决方案将是

String file = "01_test20190913.pdf";
System.out.println(file.substring(0, file.length() - 12)+".pdf");
Run Code Online (Sandbox Code Playgroud)

在这里,我将字符串的第一部分(不包含最后12个字符)并添加“ .pdf”


ili*_*hma 5

有很多好的答案,但我想再介绍一个。如果文件名不仅在日期部分包含数字,它也会起作用。我假设日期总是出现在扩展之前并且具有固定长度。

s.replaceAll("\\d{8}\\.pdf", ".pdf");
Run Code Online (Sandbox Code Playgroud)

如果文件扩展名不同,那么您可以做一些额外的工作:

public static String removeDate(String s) {
    final String extension = s.substring(s.lastIndexOf("."));
    final String pattern = "\\d{8}\\" + extension;

    return s.replaceAll(pattern, extension);
}

public static void main(String args[])
{
    System.out.println(removeDate("test20190101.pdf"));
    System.out.println(removeDate("123123test20190101.txt"));
    System.out.println(removeDate("123te11st20190101.csv"));
}
Run Code Online (Sandbox Code Playgroud)

这只能使用正则表达式来完成,但代价是可读性。

  • 也应该转义点:`"\\d{8}\\.pdf"` (2认同)