有没有简单的方法来检查一个数组是否包含Java中的另一个数组?
基本上,我想做这样的事情:
private static final String NOT_ALLOWED;
public boolean isPasswordOkay(char[] password){
return new String(password).contains(NOT_ALLOWED);
}
...但未将密码转换为String
Sun indicates could be a security risk。是否有一种更简洁的方法,而不是手动迭代数组的每个元素?
答案 0 :(得分:4)
如果您使用Guava,则可以定义如下方法:
public static boolean contains(final char[] array, final char[] target){
return Chars.indexOf(array, target)>=0;
}
<强>参考:强>
如果您不想使用Guava,这里是我的方法和Guava的合并版本:
public static boolean contains(final char[] array, final char[] target){
// check that arrays are not null omitted
if (target.length == 0) {
return true;
}
outer:
for (int i = 0; i < array.length - target.length + 1; i++) {
for (int j = 0; j < target.length; j++) {
if (array[i + j] != target[j]) {
continue outer;
}
}
return true;
}
return false;
}
答案 1 :(得分:1)
private static final String NOT_ALLOWED="...";
public boolean isPasswordOkay(char[] password){
StringBuilder sb = new StringBuilder(password);
boolean ret = sb.indexOf(NOT_ALLOWED) != -1;
sb.replace(0, sb.length(), " ");
return ret;
}
答案 2 :(得分:0)
在http://www.coderanch.com/t/35439/Programming/Intersection-two-arrays有一个听起来像你想要的解决方案 - 交叉是这类事情的数学术语!
答案 3 :(得分:0)
我找不到任何会这样做的东西。一个选项可能是使用Apache Collections并使用ArrayUtils子数组方法创建子数组,然后在您创建的每个子数组上进行比较,迭代原始数组。
答案 4 :(得分:-1)
new String(password).matches(".*["+NOT_ALLOWED.replace(']','\\').replace("\\","\\\\\")+"].*");
要注意......你必须逃避一些不允许使用的角色,例如]
和\
!