这是我与一位朋友进行的辩论:制作评估方法的最快方法是什么,该方法可以检查给定的字符串是否包含不允许的字符之一
方法一:简单
char [] invalidChars = "!@#$%^...".toCharArray(); for (int i = 0; i < myString.length(); i++) { char ch = myString.charAt(i); for (int j = 0; j < invalidChars.length; j++) { if (invalidChars[j] == ch) { return false; } } }
方法II:利用地图的O(1)
Map <String,String> map = new HashMap<String, String>(); map.put("!", null); map.put("@", null); map.put("#", null); map.put("$", null); map.put("^", null); ... for (int i = 0; i < labels.length(); i++) { char ch = labels.charAt(i); if (map.containsKey(ch)) { return false; } return true; }
我的方法实际上是N2,但是当invalidChars的数量较少时,方法I等于N。情况一:有很多无效字符,情况二:只有很少的无效字符,该怎么办?
注意:我不是在寻找任何内置的Java解决方案,而是在寻找过滤少数(不是全部)非文本字符的算法
如果仅对验证ASCII字符感兴趣,则长度为128的布尔查找表 可能 比上述任何一种方法都快。