修改HashMap的输出并解析为Integer

时间:2015-12-26 19:58:46

标签: java parsing io hashmap

我无法理解为什么控制台中的输出只是在输出中的每一行添加另一对元素。所以有代码:

package zadania;

import java.io.*;
import java.util.HashMap;

public class Grades {

    public static void main(String[] args) throws IOException {

        BufferedReader reader = new BufferedReader(new FileReader("oceny.txt"));
        HashMap<String, String> map = new HashMap<String, String>();
        String line;

        while ((line = reader.readLine()) != null) {
            String[] parts = line.split(":", 2);
            String key = parts[0];
            String value = parts[1];
            map.put("Student: " + key, "grade: " +value);
            System.out.print(map + "\n");
        }
        reader.close();
    }
}

输出如下:

{Student: Kowalski Jan=ocena: 3}
{Student: Mak Ireneusz=ocena: 2, Student: Kowalski Jan=ocena: 3}
{Student: Mak Ireneusz=ocena: 2, Student: Gawron Tomasz=ocena: 5, Student:           Kowalski Jan=ocena: 3}
{Student: Szymczyk Jaroslaw=ocena: 4, Student: Mak Ireneusz=ocena: 2,  Student: Gawron Tomasz=ocena: 5, Student: Kowalski Jan=ocena: 3}

但是,我只是希望输出是在新行中逐个打印的那些键和值对,但它们会累加每一行。

其他的是我的文本文件是这样的:

Kowalski Jan:3
Mak Ireneusz:2
Gawron Tomasz:5
Szymczyk Jaroslaw:4

我的第二个问题是:你如何解析第二列,其中包含那些等级为整数(就像我想要使用TreeMap)? 我正在StackOverflow上的各种答案中阅读它,但我可能会愚蠢地弄清楚你是如何解析地图的:D

2 个答案:

答案 0 :(得分:3)

获得此输出的原因是循环的每次迭代都会打印整个public class Main extends JFrame{ private JPanel MainPanel; public static void main (String[] args){ //--main method --// Main window = new Main(); window.setVisible(true); } private Main(){ //--constructor --// MainPanel = new JPanel(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("resources/cancelIcon.png"))); this.add(MainPanel); } } 。如果您只想打印添加到地图中的最后一项,您可以这样做:

map

答案 1 :(得分:0)

而不是

    System.out.print(map + "\n");

System.out.println("{Student: " + key+", grade: " +value+"}");