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

时间:2013-03-15 07:40:38

标签: java string

我有一个字符串数组:

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;
        }
    }

但这是错误的。如你所见,它只会返回“02301”,但可能会有更深的相似性。

请建议我更好的方法。感谢。

2 个答案:

答案 0 :(得分:0)

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

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

所有这些方法都会略有不同,但它们都归结为在循环中正确使用breakcontinue

答案 1 :(得分:0)

删除代码中的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);
        }
    }