2017-08-15 42 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

相关问题