簡體   English   中英

刪除字符串中的特定單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM