2017-08-15 45 views
1

我問我是否我的代碼是自定義過濾器的常見和最有效的方法。用戶可以選擇哪些字符可以使用/不使用。骯髒的文本可能會很長,所以我要看到我的代碼需要儘可能高效:這是自定義過濾器最有效的方式嗎?

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"); 
    } 

將感謝的人誰擁有這個

+0

你是否運行過代碼?我只需要檢查代碼是否乾淨。 –

回答

2

更多的知識有有beenmanyquestions問候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的解決方案更好,因爲只要找到無效字符,它就會失敗。如果你有一百萬個無效字符的字符串,那就變得很重要。實際上是 – Michael

+0

!正則表達式花了1350016納秒,包含 花了189994納秒。非常感謝 –

+0

@Michael這只是因爲OP首先替換整個字符串。 'String.matches()'可能會表現得更好。 – shmosel

相關問題