Java 比较两个ArrayList,然后向特定文本文件添加匹配项

Java 比较两个ArrayList,然后向特定文本文件添加匹配项,java,Java,我有两个arraylists名称。我正试图比较这两者。如果第一个数组中的名称等于第二个数组中的名称,我想创建一个名为“name j”的文本文件,其中j是找到匹配名称的索引。现在它似乎能找到两个匹配的名字,但不能找到最后一个。我不知道为什么它找不到最后一个 这是我的密码: ArrayList <String> names = new ArrayList (); names.add("Stephen"); names.add("James");

我有两个
arraylists
名称。我正试图比较这两者。如果第一个数组中的名称等于第二个数组中的名称,我想创建一个名为“name j”的文本文件,其中j是找到匹配名称的索引。现在它似乎能找到两个匹配的名字,但不能找到最后一个。我不知道为什么它找不到最后一个

这是我的密码:

ArrayList <String> names = new ArrayList ();
        names.add("Stephen");
        names.add("James");
        names.add("Billy");
        names.add("Connor");
        names.add("Katie");

        ArrayList <String> names2 = new ArrayList();
        names2.add("Carlos");
        names2.add("Katie");
        names2.add("James");
        names2.add("Cameron");
        names.add("Blly");

        int i,j;
        i=0;
        j=0;

        int nameSize = names.size();
        int names2Size = names2.size();
        int checkMatches=0;
       // boolean endOfList = false;

        while (i<nameSize)  {
            if (names.get(i).equals(names2.get(j))) {
                //increase i b/c of match
                System.out.println("Match " + names.get(i));
                infoToFile(j,i,names);
                i++;
            } else if (j == names2Size-1) {
                System.out.println("No Match");
                i++;
                j=0;
            } else  {
                System.out.println("No Match");
                j++;
            }
        }

public static  void infoToFile(int j,int i,ArrayList <String> names)    {
        Writer output;
        try {
            output = new BufferedWriter(new FileWriter("name " + j + ".txt",true));
            output.append(names.get(i) + "\n");
            output.close();
        } catch (IOException ex) {
            Logger.getLogger(RosterPractice.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
arraylistnames=newarraylist();
姓名。添加(“斯蒂芬”);
姓名。添加(“詹姆斯”);
姓名。添加(“比利”);
名称。添加(“康纳”);
姓名。添加(“凯蒂”);
ArrayList names2=新的ArrayList();
名称2.添加(“卡洛斯”);
名称2.添加(“凯蒂”);
名称2.添加(“詹姆斯”);
名称2.添加(“卡梅隆”);
名称。添加(“Blly”);
int i,j;
i=0;
j=0;
int nameSize=names.size();
int names2Size=names2.size();
int checkMatches=0;
//布尔值endOfList=false;

虽然(i所以,您可以通过许多不同的方式来实现这一点,但我将向您展示我是如何做到的(并对其进行测试):

首先,您需要检查哪个列表比其他列表大,否则您将获得indexOutOfBoundsException 之后,对最小的列表执行for,检查字符串是否相同(如果满足此条件),调用该方法创建一个文件并将其作为参数传递给crete,然后将文件的名称传递给crete(我通过传递索引和名称来实现,但也可以通过传递它们的串联来实现)

代码示例如下:
publicstaticvoidmain(字符串[]args){
列表名称=新的ArrayList();
姓名。添加(“斯蒂芬”);
名称。添加(“Sepp”);
姓名。添加(“詹姆斯”);
姓名。添加(“比利”);
名称。添加(“康纳”);
姓名。添加(“凯蒂”);
System.out.println(名称);
列表名称2=新的ArrayList();
名称2.添加(“卡洛斯”);
名称2.添加(“Sepp”);
名称2.添加(“凯蒂”);
名称2.添加(“詹姆斯”);
名称2.添加(“卡梅隆”);
名称2.添加(“Blly”);
名称2.添加(“Xoce”);
名称2.添加(“玛丽”);
System.out.println(名称2);
if(names.size()>names2.size()){
对于(int i=0;i
为什么要发布两个答案?
public static void main(String[] args) {
    List<String> names = new ArrayList<String>();
    names.add("Stephen");
    names.add("Sepp");
    names.add("James");
    names.add("Billy");
    names.add("Connor");
    names.add("Katie");
    System.out.println(names);

    List<String> names2 = new ArrayList<String>();
    names2.add("Carlos");
    names2.add("Sepp");
    names2.add("Katie");
    names2.add("James");
    names2.add("Cameron");
    names2.add("Blly");
    names2.add("Xoce");
    names2.add("Marie");
    System.out.println(names2);

    if (names.size() > names2.size()) {
        for (int i = 0; i < names2.size(); i++) {
            if (names.get(i).equals(names2.get(0))) {
                createFile(i, names.get(0));
            }
        }
    } else {
        for (int i = 0; i < names.size(); i++) {
            if (names.get(i).equals(names2.get(i))) {
                createFile(i, names.get(1));
            }
        }
    }
}

private static void createFile(int i, String name) {
    File f = new File(name + "_" + i);
    try {
        f.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

}