给出一个字符串=“ test20190906.pdf”,我如何只获得“ test.pdf”,以便它通过使用string.replace或删除从字符串中删除日期?
考虑格式,始终为文件名+日期+扩展名。
答案 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个字符将是日期。只要我们将其删除,然后放在“。”回到文件名,不考虑扩展名,文件名前面的字符,而无需使用正则表达式。