删除字符串中的特定单词

时间:2019-03-21 10:44:43

标签: java string

给出一个字符串=“ test20190906.pdf”,我如何只获得“ test.pdf”,以便它通过使用string.replace或删除从字符串中删除日期?

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

9 个答案:

答案 0 :(得分:10)

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

"test20190906.pdf".replaceAll("[0-9]{8}\\.", "."));

答案 1 :(得分:5)

我看到了以前的答案,如果文件名中有其他数字,例如01_test20190913.pdf

,该答案将不起作用。

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

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

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

答案 2 :(得分:4)

有很多好的答案,但我想再提出一个。如果文件名不仅在日期部分包含数字,那么它将起作用。我认为日期总是在扩展名之前出现,并且长度固定。

s.replaceAll("\\d{8}\\.pdf", ".pdf");

如果文件扩展名有所不同,则您可以做一些其他工作:

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"));
}

这只能用regexp来完成,但是要以可读性为代价。

答案 3 :(得分:1)

假设日期仅包含数字,则可以使用regex替换数字,例如:

String fileNameWithDate = "test20190906.pdf";
String fileName = fileNameWithDate.replaceAll("[0-9]+", ""));
System.out.println(fileName);

答案 4 :(得分:1)

如果日期格式为“ yyyyMMdd”,那么我建议采用@pavelbere给出的最简单的解决方案。但是此解决方案还假定日期始终附加在文件名的末尾。

String file = "test20190906.pdf"; 
String fileName = file.substring(0, file.length() - 12)+".pdf";

答案 5 :(得分:0)

如果您只想从字符串中删除日期,则可以查看解决方案(假设日期恰好在.pdf之前):

    String fileNameWithDate = "te3st320190906.pdf";

    StringBuilder sb = new StringBuilder(fileNameWithDate).replace(fileNameWithDate.indexOf(".pdf") - 8,
            fileNameWithDate.indexOf(".pdf"), "");
    System.out.println(sb.toString());

输出:

te3st3.pdf

答案 6 :(得分:0)

string name = "test20190906.pdf"
name.replaceAll("[0-9]","");

答案 7 :(得分:0)

我的方法是删除所有8个数字长且在最后一个点旁边的数字,然后使用正则表达式将它们替换为点:(\d{8})(?!.*\d\.)\.

String filename = "filename12345678.pdf";
filename = filename.replaceAll("(\\d{8})(?!.*\\d\\.)\\.", ".");

您可以看到它的使用情况及其作用here的说明。

如果日期可以使用不同的长度,则用{8}替换*,这样日期就可以是任意长度。

答案 8 :(得分:0)

不使用正则表达式的答案: 对于filename作为原始字符串:

l = filename.split('.')
l[-2] = l[-2][:-8]
output = '.'.join(l)

这使用了最后一个'。'的事实。将始终在扩展名之前,因此在此之前的8个字符将是日期。只要我们将其删除,然后放在“。”回到文件名,不考虑扩展名,文件名前面的字符,而无需使用正则表达式。