[英]Remove specific words in a string
給定一個string =“test20190906.pdf”,如何才能獲得“test.pdf”,以便通過使用string.replace或remove來刪除字符串中的日期?
考慮到格式將始終是文件名+日期+ .extension。
您可以使用正則表達式刪除類似於任何格式的日期的 連續數字,前提是文件名緊跟日期附加。
"test20190906.pdf".replaceAll("[0-9]{8}\\.", "."));
我看到以前的答案,如果您在文件名中有其他數字,答案不起作用,例如: 01_test20190913.pdf
在那種情況下解決方案將是
String file = "01_test20190913.pdf";
System.out.println(file.substring(0, file.length() - 12)+".pdf");
這里我把字符串的第一部分沒有最后12個字符並添加“.pdf”
有很多好的答案,但我想再提出一個。 如果文件名不僅包含日期部分中的數字,它也會起作用。 我假設日期始終在擴展之前出現並且具有固定長度。
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"));
}
這可以僅使用正則表達式完成,但代價是可讀性。
假設日期僅包含數字,您可以使用regex
替換數字,例如:
String fileNameWithDate = "test20190906.pdf";
String fileName = fileNameWithDate.replaceAll("[0-9]+", ""));
System.out.println(fileName);
如果日期的格式是“yyyyMMdd”,那么我建議選擇@pavelbere給出的最簡單的解決方案。 但是這個解決方案還假設日期總是附加在文件名的末尾。
String file = "test20190906.pdf";
String fileName = file.substring(0, file.length() - 12)+".pdf";
string name = "test20190906.pdf"
name.replaceAll("[0-9]","");
我的方法是刪除所有8位數的數字並且在最后一個點旁邊,並使用正則表達式替換它們: (\\d{8})(?!.*\\d\\.)\\.
String filename = "filename12345678.pdf";
filename = filename.replaceAll("(\\d{8})(?!.*\\d\\.)\\.", ".");
你可以看到這個被使用,並解釋它在這里做了什么。
如果日期可以是不同的長度,則將{8}
替換為*
,這樣可以使日期為任意長度。
不使用正則表達式的答案:將filename作為原始字符串:
l = filename.split('.')
l[-2] = l[-2][:-8]
output = '.'.join(l)
這使用了最后一個'。'的事實。 將始終在擴展名之前,因此在此之前的8個字符將是日期。 只要我們刪除那些,並把'。' 回來,我們有文件名,無論擴展名如何,無論前面的字符如何,都不使用正則表達式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.