这是我和我的一个朋友进行的一场辩论:如何最快速地创建一个验证方法,检查给定的字符串是否包含任何非允许字符。
方法二:利用Map的O(1)
方法一:简单
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;
}
}
}
方法二:利用Map的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;
}
当无效字符较少时,方法I实际上等同于N2但与N一样好。在以下情况下应优先考虑哪种方法:情况I:有很多无效字符,情况II:只有少量无效字符?
注:我不需要任何内置的Java解决方案,只需算法来过滤少量(而非全部)非文本字符。