比较java中的2个字符数组

时间:2014-05-01 20:34:25

标签: java arrays

我试图简单地比较两个字符串数组。代码的总体目的是遍历数组的每个索引并比较每个索引处的两个索引(a [1] == b [1])并在两个数组为1时将数字a 1加1相同。完成后,它将打印出数组的大小,作为两者相同的总次数。当我尝试比较代码时,我得到一个错误。我已经尝试过评论和测试,但我的第23行的比较声明似乎有问题。

import java.util.*;
public class Slop 
{  

public static void main(String [] args)  
{  
     // Compare the 2 Signatures
     String control = " 0x302E0215032648D0ABE03F7226239932B9293B157F3EECF863021503635EB910778742D88A880B867C45CFFDEC9970BC";
     char[] controlArray = control.toCharArray();
    //System.out.println(controlArray);
     String test = "0x302E021501452CB212DBE4C8B541D02D79EF140BE617875EC7021503951DB8026549B0F9AB8FDB69F355F37A5A967424";
     char[] testArray = test.toCharArray();
     List<Integer> countArray = new ArrayList<Integer>();

    // try{
     for(int i =0; i < 99; i++)
     {
         //System.out.println(controlArray[i]);
         for(int j =0; j < 99; j++)
         {
            //System.out.println(controlArray);
             //System.out.println(testArray[j]);
             if (controlArray[i] == testArray[j])
             {
                countArray.add(1);

             }


         }

     }
     System.out.println(countArray.size());
}}}

我一直收到此错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 98
at Slop.main(Slop.java:23)

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

您应该使用命令:controlArray.length而不是猜测数组的长度。

import java.util.*;
public class Slop 
{  
   public static void main(String [] args)   
   {  
     // Compare the 2 Signatures
     String control = "0x302E0215032648D0ABE03F7226239932B9293B157F3EECF863021503635EB910778742D88A880B867C45CFFDEC9970BC";
     char[] controlArray = control.toCharArray();
     String test    = "0x302E021501452CB212DBE4C8B541D02D79EF140BE617875EC7021503951DB8026549B0F9AB8FDB69F355F37A5A967424";
     char[] testArray = test.toCharArray();
     List<Integer> countArray = new ArrayList<Integer>();

     for(int j =0; j < controlArray.length; j++)
     {
         if (controlArray[j] == testArray[j])
         {
            countArray.add(1);
         }
     }
     System.out.println(countArray.size());
   }
}

答案 1 :(得分:0)

它说您的索引超出范围。 当我查看我们的数组看起来,你在controlArray和98元素testArray中有99个元素。 请检查一下,看看是否能解决您的问题。

答案 2 :(得分:0)

介绍性评论(真实,但并不好):

  • 停止使用愚蠢的变量名称。单个字符变量名称只提供一条信息“此代码的作者是粗心的”(编辑为不太自以为是)。
  • 只需记住int变量中有多少个字符相同的计数。使用动态阵列严重过度。

答案: 注意:此答案与问题描述相符,但不符合问题的实现。 请尝试以下方法:

int countOfSameChars = 0;
int shortestLength;

// First, figure out the length of the shortest string.
if (controlArray.length <= testArray.length)
{
    shortestLength = controlArray.length;
}
else
{
    shortestLength = testArray.length;
}

// Avoid array out of bounds errors by iterating only to the shortest length.
for (int index = 0; index < shortestLength; ++index)
{
    if (controlArray[index] == testArray[index])
    {
        ++countOfSameChars;
    }
}

System.out.println("Blam: " + countOfSameChars);

您对问题的描述意味着以下内容: 如果controlArray =“11”且testArray =“01”,则所需的计数为1,因为controlArray [0]!= testArray [0]和controlArray [1] == testArray [1]。