2017-07-16 50 views
-1

我有一個文件名和一個擴展名列表。我想檢查文件名是否以我擁有的列表中的任何擴展名結尾。如何檢查字符串是否以Java中字符串列表中的任何條目結尾

String fileName = "abc.txt"; 
String[] extensions = {".txt", ".doc", ".pdf"}; 

我可以手動檢查擴展名列表並檢查文件是否以列表中的任何擴展名結尾。

public static boolean checkIfFileHasExtension(String s, String[] extn) { 
    for (String entry : extn) { 
     if (s.endsWith(entry)) { 
      return true; 
     } 
    } 
    return false; 
} 

public static void main (String[] args) throws java.lang.Exception 
{ 
    // your code goes here 

    String fileName = "abc.txt"; 
    String[] extensions = {".txt", ".doc", ".pdf"}; 
    System.out.println(checkIfFileHasExtension(fileName, extensions)); 
} 

有更好的方式使用StringUtils或Streams或任何其他Java庫嗎?我正在尋找一個單線。謝謝!

+1

對於一次性的文件名和擴展名的合理數量來標記,你可能不會得到在實踐中更好的解決方案比你擁有的還要多。 (不要擔心試圖使它成爲一個單行:明確的代碼比短代碼更好。)也就是說,我認爲在一般情況下,針對這類問題的最佳算法是構建後綴樹並進行測試反對。 –

+0

請解釋downvote的原因? – Anit

+0

@DanielPryden感謝您的建議! – Anit

回答

6

試試這個。

public static boolean checkIfFileHasExtension(String s, String[] extn) { 
    return Arrays.stream(extn).anyMatch(entry -> s.endsWith(entry)); 
} 
+0

或's :: endsWith' – shmosel

-2

您可以使用StringUtils.indexOfAny

更新

根據JavaDoc -

public static int indexOfAny(CharSequence str, 
          CharSequence... searchStrs) 
Find the first index of any of a set of potential substrings. 

A null CharSequence will return -1. A null or zero length search array will return -1. A null search array entry will be ignored, but a search array containing "" will return 0 if str is not null. This method uses String.indexOf(String) if possible. 

StringUtils.indexOfAny(null, *)      = -1 
StringUtils.indexOfAny(*, null)      = -1 
StringUtils.indexOfAny(*, [])      = -1 
StringUtils.indexOfAny("zzabyycdxx", ["ab","cd"]) = 2 
StringUtils.indexOfAny("zzabyycdxx", ["cd","ab"]) = 2 
StringUtils.indexOfAny("zzabyycdxx", ["mn","op"]) = -1 
StringUtils.indexOfAny("zzabyycdxx", ["zab","aby"]) = 1 
StringUtils.indexOfAny("zzabyycdxx", [""])   = 0 
StringUtils.indexOfAny("", [""])     = 0 
StringUtils.indexOfAny("", ["a"])     = -1 
+2

這個答案沒有幫助。請添加一個例子或其他東西。 – CodingNinja

+1

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/16725245) –

2

如果使用List而不是一個數組,你可以使用contains(String)方法。 此外,您可以使用String結合subString()方法的 lastIndexOf()方法檢索擴展。

List<String> extensions = Arrays.asList(".txt", ".doc", ".pdf"); 
boolean isContained = extensions.contains(fileName.subString(fileName.lastIndexOf(".")+1)); 
+0

'在List上包含()'是O(N)。如果你想走這條路線,一套'Set'會更好,更清晰。 –

0

一種不同的方法是使用.作爲分隔符

String fileName = "abc.txt"; 
List<String> extensions = Arrays.asList("txt", "doc", "pdf"); 

boolean checkExt(String fileName, List<String> extensions) 
{ 
    String s = fileName.split("."); 
    return extensions.contains(s[s.length-1]); 
} 
相關問題