2017-07-16 61 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]); 
} 
相关问题