【发布时间】:2011-02-01 08:25:50
【问题描述】:
这是我和我的一个朋友进行的一场辩论:创建一个验证方法来检查给定字符串是否包含不允许的字符之一的最快方法是什么
方法一:简单
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,但在 invalidChars 数量较少时与 N 一样好。 情况一:无效字符多,情况二:无效字符少时,应该首选什么?
注意:我不是在寻找任何内置的 java 解决方案,而是过滤少数(不是全部)非文本字符的算法
【问题讨论】: