2017-08-15 7 views
1

私のコードがカスタムフィルターのための一般的で最も効率的な方法であるかどうか尋ねる。ユーザーは、使用できる/使用できない文字を選択できます。汚れたテキストはので、私は私のコードは、可能な限り効率的にする必要があることを確認する必要が非常に長くなることができます。このこれはカスタムフィルタにとって最も効率的な方法ですか?

+0

コードを実行しましたか?コードがきれいであるかどうかを確認するだけです。 –

答えて

2

についてのより多くの知識を持っている人のためにbeenmanyquestionsに関しては存在してい

String dirtyText = "iamacleantext<>>"; 
    String allowedCharacters = "abcdefhijk$<>/lmnoqrgstuvwxyz"; 

    String result = dirtyText.replaceAll("[" + allowedCharacters + "]",""); 

    if (result.isEmpty()) { 
     System.out.println("Ok, your text can be used"); 
    } else { 
     System.out.println("Sorry the text contains not allowed characters"); 
    } 

は感謝するでしょうString.containsと正規表現ほとんどのスレッドによれば、正規表現のパフォーマンスが悪いことは明らかです。別の方法(最初の違法な文字を取り除く):

private static boolean check(String dirtyText) { 
    String allowedCharacters = "abcdefhijk$<>/lmnoqrgstuvwxyz"; 
    for (int i=0; i < dirtyText.length(); i++) { 
     if (!allowedCharacters.contains(dirtyText.substring(i, i+1))) { 
      return false; 
     } 
    } 
    return true; 
} 
+1

これは、無効な文字が見つかると直ちに失敗するため、OPのソリューションより優れています。 100万文字の無効な文字列がある場合は、それが重要になります。実際には – Michael

+0

!正規表現は1350016 nsをとり、ちょうど を含む189994 ns。ありがとうございました –

+0

@MichaelそれはOPが文字列全体を最初に置き換えているからです。 'String.matches()'の方がずっと良いでしょう。 – shmosel

関連する問題