为什么我会在返回的数据中得到差异。它工作正常,直到3,然后繁荣,它混乱到最后。我在做什么很简单。我从带有id,name的txt文件中获取值,并将id与另一个具有name,name的txt文件匹配,使其看起来像id,id,如下所示。但是,它并不像您期望的那样有效。匹配正在进行,直到它搞砸了。
0,1
1,3
0,2
0
3,0,4
2
3,0
4,2
4,1
2,
while ((output2 = br2.readLine()) != null) {
String[] vv = output2.split(",");
String value1 = vv[0];
String value2 = vv[1];
for (Map.Entry<Integer, String> entry : map.entrySet()) {
int key = entry.getKey();
String value = entry.getValue();
//System.out.println(key+","+value);
if ((value1.equals(value))) {
System.out.print(key + ",");
}
if ((value2.equals(value))) {
System.out.print(key + "\n");
}
}
}
数据
ids.txt
0,Triple H
1,John Cena
2,Megan Fox
3,The Undertaker
4,Pamela Anderson
5,The Rock
的text.txt
Triple H,John Cena
John Cena,The Undertaker,
Triple H,Megan Fox
The Undertaker,Triple H
答案 0 :(得分:6)
在你的第四个条目
String value2 = vv[1];
vv[1]
将为null,因为第一个逗号后没有值。
编辑:
在你的第四个条目
The Undertaker,Triple H
value2 (i.e. Triple H)
在first iteration
的循环的zeroth position
中匹配,因此会打印\n
,
然后entry 3 is matched
中的4rd iteration
,并打印在next line with a comma
这就是为什么你得到像
这样的输出0
3,0,4
答案 1 :(得分:1)
似乎一个简单的解决方案是保持匹配的值直到for循环之后。
while ((output2 = br2.readLine()) != null) {
String[] vv = output2.split(",");
String value1 = vv[0];
String value2 = vv[1];
int key1 = -1;
int key2 = -1;
for (Map.Entry<Integer, String> entry : map.entrySet()) {
int key = entry.getKey();
String value = entry.getValue();
//System.out.println(key+","+value);
if ((value1.equals(value))) {
key1 = key;
}
if ((value2.equals(value))) {
key2 = key;
}
}
if (key1 != -1 && key2 != -1) {
System.out.println(key1 + ", " + key2 + "\n");
}
}