好吧,我目前有一个包含键码的字符串数组,我想检查第一个元素是否与第二个元素共享共同的规范,例如[012]与[123]具有相似的元素。我当前循环遍历第一个元素的长度,然后循环遍历第二个元素的长度,然后比较这两个元素,如下所示: If(A[1].charAt(j) == A[2].charAt[i]) c++; c 是一个计数器,显示有多少 键码具有的共同元素。这是我创建的方法
static boolean hasSimilarity(String[] A, int K, int i){
int c = 0;
for(int j = 0;j<K;j++){
for(int m = j;m<K;m++){
if(A[i].charAt(j) == A[i+1].charAt(m)) c++;
}
}
return c != 0;
}
这是它在 Main 类中的执行:
int max = -1;
findSimilar FS = new findSimilar();
for (int i = 0; i < sum.length -1; i++) {
boolean hasSimilar = FS.hasSimilarity(key,K,i);
if (!hasSimilar) {
int summ = sum[i] + sum[i + 1];
System.out.println(summ);
if (summ > max) {
max = summ;
}
}
}
当我运行这个时,我得到一个 java.lang.StringIndexOutOfBoundsException out of range: 0 。我究竟做错了什么?有没有更好的方法来比较两个键码以找到它们之间的相似之处?
最佳答案
此错误:
java.lang.StringIndexOutOfBoundsException out of range: 0
仅当您的字符串之一是空白字符串 ""
时才会发生。
当没有字符0
(即第一个字符)时,您试图获取charAt(0)
。
——-
如果您首先收集每个字符的计数然后比较它们,您将避免这个问题,并拥有一个更有效的算法,这将具有时间复杂度 O(n),而您的算法是 O(n 2)(尽管您的n
(输入的长度)似乎很小)。
关于java - 在java中比较两个字符串之间的所有字符(即使它们包含数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60282444/