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