迭代String,Vector LinkedHashmap并打印完整的向量

时间:2017-02-08 01:13:02

标签: java

我已经定义了LinkedHashMap。

LinkedHashMap<String,Vector<String>> hash = new LinkedHashMap<String,Vector<String>>();

我正在尝试遍历hashmap并将每个键的结果打印到文本文件中。目前它只返回每个向量中的第一个值。

        for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){
            printWriter.println(">NM_"+sID+"_"+entry.getKey());
            printWriter.println(entry.getValue());
        }

例如,它是这样写的:

NM_152486.2_rheMac3
[MSKGILQVHPPICDCPGCRISSPV]

但实际上应该写一些更像这样的东西:

NM_152486.2_rheMac3
MSKGILQVHPPICDCPGCRISSPVVA-RVGRLFYMTGFPLAFPPPSAALRPPERELSLPHRPTSTSSSSSPYSG--PTPGCSSPKRENG--TP-------------

3 个答案:

答案 0 :(得分:0)

只需使用for-each循环

    LinkedHashMap<String,Vector<String>> hash = new LinkedHashMap<String,Vector<String>>();

    Vector<String> v = new Vector<String>();
    v.add ("a");
    v.add ("b");

    hash.put("key", v);

    for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){
        System.out.println(entry.getKey());

        for (String s : entry.getValue()) {
            System.out.println(s);
        }
    }

修改

根据您的问题,我无法确定-的来源,但您可以根据需要进行格式化

答案 1 :(得分:0)

它适用于我(即打印矢量的所有元素,用逗号分隔如下:[abc,def,ghijklmnop])

我尝试使用此代码模拟您的问题:

        try {
        PrintWriter printwriter = new PrintWriter(new File("d:\\a.txt"));
        Vector<String> v = new Vector<String>();
        v.add("abc");
        v.add("def");
        v.add("ghijklmnop");
        Vector<String> v2 = new Vector<String>();
        v2.add("111");
        v2.add("222");
        v2.add("333");
        LinkedHashMap<String,Vector<String>> hash = new LinkedHashMap<>();
        hash.put("a1", v);
        hash.put("b2",v2);
        for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){
            printwriter.println(">NM_"+entry.getKey());
            printwriter.println(entry.getValue());
        }
        printwriter.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


} 

文件内容为:

  

NM_a1   [abc,def,ghijklmnop]

     

NM_b2   [111,222,333]

linkedhashmap值是否可能包含只有1个元素的向量?

你能展示其余的代码吗?

答案 2 :(得分:0)

您应该看一下使用嵌套循环:

for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){
        printWriter.println(">NM_"+sID+"_"+entry.getKey());
        for (String nestedString : entry.getValue())
        {
            printWriter.print(nestedString);
            printWriter.print("-");
        }
        printWriter.println();
    }

但是,我希望Vector toString()方法在调用

时被调用
printWriter.println(entry.getValue());

写一个以逗号分隔的值列表。 (见http://www.java2s.com/Tutorials/Java/java.util/Vector/Java_Vector_toString_.htm)。既然它似乎没有这样做,也许你的代码中的某个地方你只需要为每个Vector添加一个字符串? 尝试尝试:

for(Map.Entry<String,Vector<String>> entry : hash.entrySet()){
        printWriter.println(">NM_"+sID+"_"+entry.getKey());
        for (String nestedString : entry.getValue())
        {
            printWriter.print(nestedString);
            printWriter.print("-");
        }
        printWriter.println(" " + entry.getValue().size());
    }

查看每个向量中是否确实只有一个字符串。