Java 获取字符串数组项的类似部分

Java 获取字符串数组项的类似部分,java,string,Java,String,我有一个字符串数组: qTrees[0] = "023012311312201123123130110332"; qTrees[1] = "023012311130023103123130110332"; qTrees[2] = "023013200020123103123130110333"; qTrees[3] = "023013200202301123123130110333"; 使用这个循环,我尝试从他们那里检索类似的部分: String similarPart = ""; f

我有一个字符串数组:

qTrees[0] = "023012311312201123123130110332";
qTrees[1] = "023012311130023103123130110332";
qTrees[2] = "023013200020123103123130110333";
qTrees[3] = "023013200202301123123130110333";
使用这个循环,我尝试从他们那里检索类似的部分:

String similarPart = "";
    for (int i = 0; i < qTrees[0].length(); i++){
        if (qTrees[0].charAt(i) == qTrees[1].charAt(i) &&
                qTrees[1].charAt(i) == qTrees[2].charAt(i) &&
                qTrees[2].charAt(i) == qTrees[3].charAt(i) ){

            similarPart += qTrees[0].charAt(i);
        } else {
            break;
        }
    }
String similarPart=”“;
对于(int i=0;i
但这是错误的。正如您所看到的,它将只返回“02301”,但更深层的相似性是可能的


请给我建议一个更好的方法。谢谢。

你需要更好地定义你想要实现的目标。您想:

  • 查找数组中任意两个条目之间最长的公共起始序列
  • 查找数组中所有条目的最长公共起始序列
  • 查找任意两个条目之间最长的公共序列(即相同位置的相同字符)
  • 查找数组中所有项的最长公共序列

所有这些都会给出稍微不同的方法,但归根结底都是在循环中正确使用
break
continue

删除代码中的else部分。然后它将一直检查到字符串结束

守则:

    for (int i = 0; i < qTrees[0].length(); i++){
        if (qTrees[0].charAt(i) == qTrees[1].charAt(i) &&
                qTrees[1].charAt(i) == qTrees[2].charAt(i) &&
                qTrees[2].charAt(i) == qTrees[3].charAt(i) ){

            similarPart += qTrees[0].charAt(i);
        }
    }
for(int i=0;i
返回02301的循环,但正如您从两对字符串的示例中看到的,可能有两个更深的结果:“023012311”和“023013200”。但这只适用于这个例子。也可以有不同的更独特的字符串,并且只有一个正确的结果。因此,相似性只需要在至少两个字符串之间?这取决于。这里是另一个示例:qTrees[0]=“0230120111312201123130110332”;qTrees[1]=“023012113002303123130110332”;qTrees[2]=“02301220020123103123130110333”;qTrees[3]=“02301231020230112312313011033”;这里正确的结果是:“023012”,你可以再深入一点。我仍然没有跟上。而且
31233011033
不应该是正确的结果吗?