为什么我的代码在几个阶段返回错误的密钥?

时间:2013-12-23 19:08:55

标签: java

为什么我会在返回的数据中得到差异。它工作正常,直到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

2 个答案:

答案 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");
    }
}