java - 比较字符串的字符是否存在于字符数组中
问题描述
我希望用户输入一个字符串,然后我想检查这个字符串中的每个字符是否存在于我创建的字符数组中。即使它的顺序不正确。
我的方法是初始化字符数组,然后通过使用扫描仪从用户那里得到一个字符串输入。
public static char[]aa={'A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y','U','O','B','J','Z','X'};
我创建了一个函数
private static void isValidSequence(String sequence, char[] k) {
outter :for (int j = 0; j < sequence.length(); j++) {
for (int i = 0; i < k.length; i++) {
if(sequence.charAt(j) == k[i]){
break;
} else {
System.out.println("invalid");
break outter;
}
}
}
}
发生的情况是,例如,如果字符串的第一个字母与数组的第一个输入不匹配,它会给我一个“无效”输入。我怎么能绕过呢?并使其在给出无效输出之前遍历整个字符数组。
解决方案
一种方法是sort
您的数组,然后使用二进制搜索算法(BSA):
// sort the array once
Arrays.sort(aa);
// iterate over the input string
for(int i = 0, length = sequence.length(); i < length; i++) {
// the java implementation of the BSA returns negative numbers for not found elements
if(Arrays.binarySearch(aa, sequence.charAt(i)) < 0) {
// char was not found, break loop
return;
}
}
注意:如果数组未排序/无法排序,则 BSA 无用,会产生未定义的结果。
注 2:BSAO(log n)
比简单迭代 ( ) 更快 ( O(n)
)
推荐阅读
- php - 数据插入前的数据库数据字段检查
- r - 在用户定义的函数中使用 Dplyr 来汇总数据然后绘制它
- javascript - 使用 JS 或 jQuery / Ajax 刷新 div 或页面一次
- uwp - RichEditBox 在深色主题上无法正常工作
- r - 以特殊形式重塑数据框
- php - 大表单的 Codeigniter 表单验证(28 个字段)
- docker - 在 docker 上运行具有高流量 socket.io 的 nginx
- css - 如何使位置绝对css动画响应?
- sql-server - SQL Server 视图列的大小写错误
- javascript - 检查“未定义”时,JavaScript 变量值被覆盖