java - 在java中比较两个字符串之间的所有字符(即使它们包含数字)

标签 java

好吧,我目前有一个包含键码的字符串数组,我想检查第一个元素是否与第二个元素共享共同的规范,例如[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/

相关文章:

java - Shopify java包装器连接,获取数据并发布

java - 使 JTextArea 可序列化

java - 安卓(常量)

java - 定义由 canvas2image 生成的图像的属性,例如替代标签

java - EhCache:缓存架构

java - 基本数据源连接超时问题(使用mysql)

java - 显示来自 onCreate 的 Activity

java - 从servlet传递参数到jsp页面

java - 使用 arraylist 的总计

java - 如何在android中将帧缓冲区发送到surfaceflinger?