如何修复此索引越界错误?

How to fix this index out of bounds error?

所以基本上我应该做的是我应该得到一个字符串数组列表并用两个字符串填充它并比较它们。例如,如果一个字符串是“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));
   }
 }
}


这里不是手动从字符串创建数组,而是可以使用 String.split() 方法将字符串与 , 拆分,这将 return 新数组。你得到一个异常,因为 arr1 的长度小于 arr2。当你在 arr2 循环中递增 ah++ 时。

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

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