如何解决此索引超出范围的错误?

时间:2020-04-13 05:41:41

标签: arrays indexoutofboundsexception

所以基本上我应该做的是我应该得到一个字符串数组列表,并用两个字符串填充它并进行比较。例如,如果一个字符串是“ 1,2,3,4”,第二个字符串是“ 7,6,2,8,1”,则应该打印出“ 1,2”,因为它会打印出相似的数字。但是我得到和arrayindexoutofbounds异常,我不知道如何解决它。另外,如果您有任何技巧可以缩短这段代码,请也告诉我。我有使代码超长的习惯。

import java.util.*;
public class Compare
{
 public static void main(String[]args)
 {
   ArrayList<String> hap=new ArrayList<String>();
   hap.add("1,7,8,2");
   hap.add("6,2,4,10,8");
  String ar1=hap.get(0);
   String ar2=hap.get(1);
   String[]arr1=new String[ar1.length()];
   String[]arr2=new String[ar2.length()];
   for(int i=0;i<ar1.length();i++)
   {
    if(ar1.charAt(i)!=(','))
    {
      arr1[i]=""+ar1.charAt(i);
    }
     }
   for(int i=0;i<ar2.length();i++)
   {
    if(ar2.charAt(i)!=(','))
    {
      arr2[i]=""+ar2.charAt(i);
    }
   }
   ArrayList<String> b=new ArrayList<String>();
   int ah=0;
   while(ah<arr1.length)
   {
    for(int i=0;i<arr2.length;i++)
    {
     if(arr1[ah]==arr2[i])           //error on this line
     {
       b.add(arr1[ah]);
     }
     ah++;
    }
   }
   for(int i=0;i<b.size();i++)
   {
     System.out.println(b.get(i));
   }
 }
}


1 个答案:

答案 0 :(得分:0)

此处,您可以使用String.split()方法用,拆分字符串,而不是根据字符串手动创建数组,这将返回新数组。并且由于arr1的长度小于arr2而引起异常。在ah++循环中递增arr2时。

下面的代码将解决您的问题并减小代码大小。

import java.util.*;
public class Main
{
    public static void main(String[] args) {
        ArrayList<String> hap=new ArrayList<String>();
   hap.add("1,7,8,2");
   hap.add("6,2,4,10,8");
  String ar1=hap.get(0);
   String ar2=hap.get(1);
   String[] arr1=ar1.split(",");
   String[] arr2=ar2.split(",");
   ArrayList<String> b=new ArrayList<String>();
   for(int j=0;j<arr1.length;j++)
   {
    for(int i=0;i<arr2.length;i++)
    {
     if(arr1[j].equals(arr2[i]))           //error on this line
     {
       b.add(arr1[j]);
     }
    }
   }
   for(int i=0;i<b.size();i++)
   {
     System.out.println(b.get(i));
   }
    }
}