2017-07-16 8 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つのライナーを探しています。ありがとう!

+1

として.を使用してトークン化することで、あなたは実際にはよりよい解決策を取得する可能性じゃありませんあなたが持っているものよりも。つまり、この種の問題のための最良のアルゴリズムは、一般的なケースではサフィックスツリーを構築してテストすることであると私は信じています(これは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

あなたはjavadocをよりStringUtils.indexOfAny

更新

を使用することができます -

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

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](レビュー/低品質の投稿/ 16725245) –

2

を使用すると、配列ではなくListを使用する場合は、contains(String)メソッドを使用することができます。 さらに lastIndexOf()メソッドをStringと組み合わせてsubString()メソッドを使用して拡張を取得することもできます。

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

'List 'の' contains() 'は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]); 
} 
関連する問題