2

好吧,我有两个字符串要逐个比较和检查它们是否匹配,如果命中“-”,我需要按顺序计算有多少“-”并将它们放在一个组中,就好像它们只是一个字符一样数一数这组'-'中有多少个T和C。输出应该是2.1T和2.2C,另一个是5.2C。

    String dna1 = "TC---CA--";  
    String dna2 = "TCTCCCACC";
    char[] dnaChar = dna1.toCharArray(), dna2Char = dna2.toCharArray();
    int cont = 0;
    int letters = 0;


    for (int i = 0; i < dnaChar.length; i++) {
        if (dnaChar[i] != dna2Char[i]) {
            int mut = i + 1;

            if (dna1.charAt(i) == '-') {

                cont++;
                mut -= cont;
                if (dna2.charAt(i) == 'C') {
                    letters++;
                }

                System.out.println(mut + "." + letters + dna2.charAt(i));
            } else {
                letters = 0;
                cont = 0;
                mut += 1;
                System.out.println("" + dna1.charAt(i) + " " + mut + " " + dna2.charAt(i));
            }
        }
    }

输出 2.0T 2.1C 2.2C 4.3C 4.4C 而我想要的 2.1T 2.2C 5.2C

4

1 回答 1

3

您期望的输出永远不会从您的上述代码中获得。因为在您的 if 构造中,每次您在第一个字符串中遇到“-”时都会执行..因此您将有 5 个输出,而不是 3..

其次,为了得到你需要的东西,你必须在这里做一些额外的工作。

  • 首先,当您在第一个字符串中遇到“-”时,您需要将第二个字符串中的相应字符存储到某个变量中。因为您需要它来检查连续字符。
  • 其次,每次得到一个'-',检查当前字符是否与前一个'-'匹配的最后一个字符。如果相同,则将计数增加 1,
  • 如果不一样,只需打印您想要的内容..并将您的计数重置为 0
  • 一旦你在你的第一个字符串中遇到不是'-'的字符,打印当前字符和计数值,并重置它们..

您可以尝试根据我提到的步骤进行编码..

*PS: - 对于任何代码问题,你应该首先在纸上写下你应该遵循的步骤来解决它。然后逐步将其转换为代码。将更容易理解问题并解决它。

于 2012-09-22T21:05:37.337 回答